Das ist mein Montageprogramm add.sAufruf Montage Funktion von c führt Fehler
.globl add
add:
movl 4(%esp), %eax
movl 8(%esp), %ebx
addl %ebx, %eax
ret
Das ist mein C-Programm Segmentierung. Ich versuche, das Assembly-Programm aus dem C-Programm aufzurufen.
#include <stdio.h>
int add(int a, int b);
int main() {
int res = add(5,6);
printf("%d",res);
return 0;
}
Aber der obige Code gibt mir einen Segmentierungsfehler. Was verursacht diesen Fehler und wie behebe ich ihn?
Wenn Sie die gleiche Funktion in C erstellen, wie funktioniert der Compiler Code generieren für sie? Führt es ein Stack-Setup durch, das du vermisst? Speichert es die Register, die es benutzt, um sie nicht zu überlisten (vielleicht werden sie woanders verwendet)? –
Dies ist markiert mit 'x86-64'. Wenn das wahr ist, werden Argumente in dieser Architektur in keiner mir bekannten ABI übergeben. Auf was ist das Betriebssystem und die Architektur, auf die es sich bezieht? Wie ist es zusammengestellt und verlinkt? (Absturz wahrscheinlich, weil das Lesen von (% esp) schlecht ist, weil es% rsp sein soll). – Art
Ich muss mit Art. Übereinstimmen. Kompilieren Sie dies als 32- oder 64-Bit-Code? –