objcopy stellt den Verzeichnispfad dem Symbolnamen voran

8

Ich bin dabei, objcopy zu verwenden, um eine binäre Form einer Textdatei in eine ausführbare Datei einzufügen. (Zur Laufzeit brauche ich die Datei als String). Das funktioniert gut, bis der Linker die Verweise von den Symbolnamen finden muss. Das Problem ist, dass objcopy die Symbolnamen mit dem Pfadnamen der Datei voranstellt. Da ich GNU Autotools zum Versand des Pakets verwende, ändert sich dieser vorangestellte Pfadname und ich weiß nicht, welches externe Linkersymbol im C / C ++ Programm verwendet werden soll.

%Vor%

libtest.a wurde mit (Auszug aus Makefile.am) erstellt:

%Vor%

Wie kann ich objcopy nur an den Stiel des Dateinamens als Linkersymbole erkennen? Oder gibt es einen anderen Weg um das Problem?

    
ritter 24.03.2013, 03:53
quelle

4 Antworten

7

Etwas ironisch gesagt, können Sie objcopy verwenden, um das Problem über die Option --redefine-sym zu lösen, die das Umbenennen von Symbolen erlaubt ...

  

Wenn ich objcopy verwende, um eine Objektdatei von einem PNG in einem anderen zu erstellen   Verzeichnis:

%Vor%      

Das resultierende Objekt hat die folgenden Symbole:

%Vor%      

Diese können dann umbenannt werden:

%Vor%      

Dies führt zu einem Objekt mit den Symbolnamen, die objcopy haben würde   generiert, wenn das PNG im aktuellen Verzeichnis gefunden wurde:

%Vor%
    
user1976 03.05.2013 08:27
quelle
7

Die generische Methode, Rohdaten in ELF einzufügen, wird von .incbin Assembler-Anweisungen unterstützt.

>

Der Trick besteht darin, eine Vorlage .S-Datei zu erstellen, die wie folgt aussehen könnte:

%Vor%

Diese Datei wird über cpp vorverarbeitet, so dass wir dort den Dateinamen nicht fest codieren müssen, z. wir können schreiben:

%Vor%

... und dann beim Kompilieren übergeben:

%Vor%

Schließlich, wenn wir Datei selbst vorbereiten, können wir einige zusätzliche Daten und / oder Informationen hinzufügen. Wenn Sie rohe "Textdateien" einschließen und möchten, dass diese als C-Zeichenfolgen verfügbar sind, können Sie das Byte "0" unmittelbar nach den Rohdaten hinzufügen:

%Vor%

Wenn Sie volle Flexibilität wünschen, können Sie natürlich die Datei manuell vorverarbeiten, um einen Teil davon zu verändern, zB

%Vor%

... und kompilieren Sie es dann:

%Vor%     
lmctl 23.08.2013 23:42
quelle
4

Eine andere Alternative, die ich benutzt habe, ist cd zum Quellverzeichnis und dann objcopy den Basisnamen der Quelle. In bash wäre dies:

%Vor%

Auf diese Weise sind die generierten Symbole immer _binary_file_name_xxx ohne den Pfad.

    
jfcl 23.04.2014 14:55
quelle
0

Eine einfache Lösung besteht darin, Ihre Textdatei in eine Datei umzuwandeln, mit der ein Array von Zeichen initialisiert werden kann. Also, Sie würden 0x41,0x42,0x43,0x30,0x31,0x32 für "ABC012" bekommen. Sie können diese Bytefolge dann # einschließen. Sie können auch escape alle Nicht-ASCII-Zeichen statt alles in Bytes konvertieren, so dass der größte Teil des Textes noch in der generierten Include-Datei lesbar ist.

    
Alexey Frunze 24.03.2013 08:06
quelle

Tags und Links