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 .modinfo

    objcopy -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?


Anmelden zum Antworten