Verknüpfen Sie eine dynamisch verknüpfte ausführbare Datei mit ld
ich versuche, erstellen Sie eine dynamisch verknüpfte ausführbare Datei (elf_i386) ohne gcc. Das Programm ist sehr einfach (nur eine printf -)...hier die Befehle:
$ gcc -c simple.c
$ ld -o simple -dynamic-linker /lib/ld-linux.so.2 --entry main /usr/lib/crt1.o /usr/lib/crti.o simple.o -lc /usr/lib/crtn.o
Die ausführbare Datei erstellt wird, und auch Kommando file und ldd-Befehl zeigen Sie den rechten Ausgang...
Jedoch wenn ich das Programm starten nach dem Aufruf von printf bekomme ich einen segmentation fault...ich habe geprüft, die mit objdump Sie die ausführbare Datei und ich denke, das problem ist über die dtors...scheint, dass das kompilieren mit:
$gcc -o simple simple.c
einen Abschnitt .dtors vorhanden ist, während er nicht anwesend ist in die ausführbare Datei erstellt, die direkt mit ld 🙁
Irgendwelche Ideen?
- Sie müssen zeigen Sie Ihren code, wenn Sie wollen, dass jemand zu Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verlieren die
--entry main
.main
ist nicht Ihr Einstiegspunkt_start
ist. Versuchen Sie dies:Ist es nicht notwendig, den
C
Laufzeit-Umgebung, die ich denke, es sei denn, Sie sind mitreturn
von Ihremmain()
.Können wir Streifen die CRT und nur link verwenden :
Arbeiten.
_start
bevor Sie können einige Funktionen.