eigene elf section lesen und ändern
-
Hallo
Ich habe ein Programm in dem ich eine Versionsnummer in die .modinfo section ablegen will.
#include <stdio.h> static char __module_version[] __attribute__((section(".modinfo"))) = \ "version= compiled: "__DATE__" rc1234"; int main(int argc, char **argv) { printf("%s\n", __module_version); }
Wenn ich das Programm übersetze, dann gibt er mir die Versionsnummer auch aus.
Mit objdump kann ich mir die section auch ausgeben lassen:
objdump --full-contents --section=.modinfo myprog
Soweit so gut.
Nun extrahiere ich mir die .modinfoobjcopy -O binary --only-section=.modinfo myprog tmp
Bearbeite die Section mit z.B. einem Hexeditor und füge sie dann wieder hinzu:
objcopy --remove-section=.modinfo --add-section .modinfo=tmp myprog
Wenn ich mir nun mit objdump die section anzeigen lasse, dann sieht alles gut aus:
objdump --full-contents --section=.modinfo myprog
Wenn ich das Programm nun starte, dann gibt printf mir nichts mehr aus.
Grund wird sein das der compiler __module_version an einer festen Adresse erwartet und sich die Adresse in der .modinfo section geändert hat.Wie mache ich es richtig wenn ich auf die Daten zugreifen will?