dynamisches Linken unter Assembler (nasm)

Antworten
Nachricht
Autor
asmUser

dynamisches Linken unter Assembler (nasm)

#1 Beitrag von asmUser » 23. Nov 2011 12:30

Hallo allerseits,

ich habe eine Datei library.so, welche aus C-Dateien besteht, und einer in Assembler (nasm) codierten Datei, welche ich strikt nach den Anweisungen in der Assembler Dokumentation erstellt habe. Der Erstellungs.- und Linkvorgang der Datei zu der Library wird ohne jegliche Fehlerausgabe fertiggestellt. Nun rufe ich aus dem in C codierten Teil des Codes eine in Assembler codierte Funktion auf. Ich gebe mir in dem C-Programm die Adresse der Assembler codierten Funktion aus, welche irgend einen Wert ungleich null hat.

Beim Laden der dynamischen Library durch den dynamischen Linker wird keinerlei Fehlermeldung angezeigt. Beim Aufruf der in Assembler codierten Funktion aus dem C-programmierten Code heraus ensteht jedoch ein Segmentation fault. Die Assemblerfunktion wird nicht aufgerufen, Das C-Programm scheint da an eine Adresse zu springen, welche keine ausführbaren Code enthält.

Die Überprüfung des Assembler generierten Object - Codes mittels objdump zeigt jedoch, daß die aufzurufende Funktion ordnungsgemäß exportiert wird.

Wie kann man sich in so einem Fall verhalten ?
Was kann man da tun ?

Beste Grüße und vielen Dank im voraus

asmUser

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 24. Nov 2011 15:19

Vereinfache erst einmal die Assembler-Funktion auf ein "ret", um Fehler in der Funktion selbst auszuschließen. Dann solltest du dir die Aufrufkonventionen von C-Compiler und Assembler genau angucken. Gcc ist nämlich darauf eingestellt, mit "gas" zusammenzuarbeiten, nicht mit nasm. Vielleicht sind sich gcc und nasm darüber uneins, wie der Stack zum Aufruf einer Assembler-Funktion aus C heraus auszusehen hat.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten