Page 1 of 1

dynamisches Linken unter Assembler (nasm)

Posted: 23. Nov 2011 12:30
by asmUser
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

Posted: 24. Nov 2011 15:19
by Janka
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