Squelette du projet

This commit is contained in:
Olivier Muller
2025-11-03 11:00:11 +01:00
commit ff440776bb
41 changed files with 2522 additions and 0 deletions

73
common/objtomem.awk Executable file
View File

@@ -0,0 +1,73 @@
# 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)
}
}