Aber was, wenn ich es für einen größeren Wert ändern möchte?
Sie wollen offenbar ein länger String, keinen größeren Wert.
Gibt es eine Möglichkeit, die ELF zu entpacken und neu zu verpacken?
Hängt davon ab, welche Art von ELF
Sie fragen. Wenn Sie eine verschiebbare Objektdatei des Typs ET_REL
(normalerweise .o
) haben, ist die Änderung ziemlich trivial: Sie fügen einfach einen neuen Abschnitt an das Ende der Datei an (normalerweise befindet sich der Inhalt der Zeichenfolge im Abschnitt .rodata
, so dass Sie eine (größere) Kopie davon, und dann aktualisieren Abschnitt Header .sh_offset
und .sh_size
an der richtigen Stelle in der Datei zu verweisen.
auf der anderen Seite entspricht, für einen verknüpftELF
binär (ET_DYN
oder ET_EXEC
), die Aufgabe ist so kompliziert, als sehr schwer (fast unmöglich), weil mehrere Zeiger aktualisiert werden müssten, und die Platzierung im Speicher ist nicht willkürlich.
Sie möchten also die Größe einer Zeichenfolge ändern? Dies ist prinzipiell möglich, aber da es sich aufgrund von Compiler/Linker-Optimierungen mit anderen Rohdaten überlappen kann (zB C-Style-Strings "asdf" und "sdf"), haben Sie möglicherweise mehr Glück beim Hinzufügen eines neuen Wertes .rodata-Abschnitt und Ändern aller erforderlichen Verweise auf den alten .rodata-Wert auf den neuen Speicherort. In jedem Fall ist das keine leichte Aufgabe. – jotik