Binary Files mit C-Compiler gcc erstellen



  • Guten Abend zusammen ,

    ich versuche gerade verzweifelt meinen Sourcecode in ein "plain binary file" zu kompilieren. Ich habe im Internet ein Tutorial gefunden und wollte die Praxisbeispiele einfach mal selbst austesten, um es mit eigenen Augen nachvollziehen zu können. Leider bekomme ich nicht einmal den ersten im Tutorial beschriebenen Kompilieraufruf hin. Es handelt sich dabei um

    int main() {}
    

    ^^

    Darin steht, man soll diesen mehr als simplen Funktionsrumpf mit

    gcc -c test.c
    ld -o test -Ttext 0x0 -e main test.o
    objcopy -R .note -R .comment -S -O binary test test.bin

    zu einer Binärdatei kompilieren. Funktioniert bei mir leider nicht 😛

    die erste Kompilieranforderung an den gcc macht er mir noch einwandfrei. Wäre ja auch gelacht ^^. Aber bei der zweiten Anforderung an den Linker, meckert mir der ld folgendes vor:

    test.o:test.c: (.text+0x21): undefined reference to '_alloca'
    test.o:test.c: (.text+0x26): undefined reference to '__main'

    Was mache ich nur falsch ? Liegt es vllt. daran, dass ich unter Windows kompiliere (mein binutils, gcc, ld, etc. sind Win32-Versionen) ? Soweit ich mich aber erinnern kann, habe ich das unter Linux auch schon mal ausprobiert und ich habe genau dieselbe Fehlermeldung bekommen.

    Ach ja: Mein Ziel ist es eine KOMPLETTE Binärdatei zu erstellen (keine .exe, a.out oder Sonstiges), damit ich mir mal ein Bild von C/C++ auf Assembler-Ebene mit disasm erstellen kann.

    Bitte um Hilfeeeee 😃

    Grüße, Xzi-bit



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das, was du erreichen willst, schaffst du auch mit objdump:
    objdump --disassemble test.o

    wenn du unbedingt eine binäre datei erzeugen willst, probier beim gcc aufruf die option "-fno-hosted". ich muss aber zugeben, dass ich mit gcc und den binutils in windows keine erfahrung habe. klappt "-fno-hosted" nicht, probier "-ffreestanding".

    ich denke, du kannst auch die option "--oformat" für ld verwenden, um das output format auf binär zu stellen. das spart das objcopy.



  • Hey, super ! Danke für den Tipp.
    Werd ich dann gleich mals ausprobieren...^^

    Grüße, Xzi-bit


Anmelden zum Antworten