# On utilise désormais objdump -s pour se faciliter la vie # Contenu de la section .text : # 1000 930f0000 930f7000 930fc0ff 93004000 ......p.......@. # 1010 938f0000 938f3000 938fd0ff 1301c0ff ......0......... # 1020 930f3100 930fd1ff 9301f07f 938f1100 ..1............. # 1030 13020080 930ff2ff 13030001 930f0301 ................ # 1040 930300ff 938f03ff 37040080 1304f4ff ........7....... # 1050 930f1400 9304f0ff 938f1400 938f2403 ..............$. # 1060 eff05ffa .._. # Contenu de la section .data : # 1064 78563412 cacaefbe adde0000 00000000 xV4............. # 1074 00000000 0000 ...... function swapbytes(drow) { return substr(drow, 7, 2) substr(drow, 5, 2) substr(drow, 3, 2) substr(drow, 1, 2) } function writemem(addr, section) { printf("@%08x\n", addr) # Adresse formatée # On a aligné sur un multiple de 8, let's go for (i = 1; i < length(section); i += 8) { print(substr(section, i, 8)); } print "deadc0de" # Balise de fin de section (constante) } # Ligne donnant l'info de la section # Toujours trouvée avant le reste /^Contenu|^Contents/ { if (content) { writemem(start_addr, content) } # En toute logique on pourrait mettre là le nom de section, mais # ça dépend de la locale, donc pour l'instant on laisse tomber section = 1 content = "" } /^\s*[0-9a-f]+/ { if (section) { addr = strtonum("0x" $1) start_addr = strtonum("0x" $1) / 4 if (addr != start_addr * 4) { print("Début de section non alignée : "addr) > "/dev/stderr" exit } section = 0; } for (i = 2; i <= NR; i++) { v = $i if (v ~ /[0-9a-f]{2,8}/) { # Le dernier nombre peut avoir une taille 2, 4, 6, 8 if (length(v) == 6) { v = v "00" } else if (length($i) == 4) { v = v "0000" } else if (length($i) == 2) { v = v "000000" } else if (length($i) != 8) { # Pour la partie avec les '.' continue; } content = content swapbytes(v) } } } END { if (content) { writemem(start_addr, content) } }