2016-07-28 34 views
1

Ich habe ein Projekt, wo ich einen Abschnitt einer ELF-Datei entfernen und durch einen anderen Abschnitt mit leicht modifizierten Inhalten ersetzen muss. Ich konnte zuerst den ursprünglichen Abschnitt entfernen und dann meinen gewünschten Abschnitt mit objcopy hinzufügen. Aber ich bekomme immer die Warnung, dass:Wie ersetzt man einen Abschnitt einer Elf-Datei durch einen anderen mit objcopy oder libelf, so dass es in den Speicher geladen wird?

warning: allocated section `.nv_fatbin' not in segment 

Diese im Abschnitt führt nicht in den Speicher geladen zu werden und damit die gewünschte Funktionalität nicht erreicht wird.

Was wäre der beste Weg, um es hinzuzufügen und es zurück in das Segment zu bringen?

libelf? Oder kann dies mit objcopy auch erreicht werden?

+0

Linker-Skript, denke ich. https://cygwin.com/ml/binutils/2003-05/msg00704.html. Es wäre klug zu sagen, was platofrm/tools verwenden Sie –

+0

Ich habe versucht, eine Binärdatei auf einem Standard-Ubuntu-System zu bearbeiten. Da ich neu dabei bin, verstehe ich den Ansatz des Linker-Scripts leider nicht ganz. Ich habe auch keinen Zugriff auf den Quellcode. Würde das Linker-Skript nur auf der Binärdatei arbeiten? – Abhay

+0

Nein, Linker-Skript funktioniert, wenn Sie die Dinge miteinander verknüpfen, um die Binärdatei zu erstellen. –

Antwort

1

Sie können die Option --update-section von objcopy verwenden.

Auszug aus objcopy Handbuch (https://sourceware.org/binutils/docs/binutils/objcopy.html):

--update Schnitt abschnitt = Dateiname

Ersetzen Sie die vorhandenen Inhalte eines Abschnitts namens abschnitt mit dem Inhalt der Datei Dateiname. Die Größe des Abschnitts wird an die Größe der Datei angepasst. Die Abschnittsflags für Abschnittsname bleiben unverändert. Für ELF-Format-Dateien bleibt auch das Segment-zu-Segment-Mapping unverändert, was mit --remove-section gefolgt von --add-section nicht möglich ist. Die Option kann mehrmals angegeben werden.

Hinweis: dies erfordert binutils V2.26 oder höher.