Ceci est mon programme de montage add.sfonction d'appel d'assemblage de c conduit à la segmentation faute
.globl add
add:
movl 4(%esp), %eax
movl 8(%esp), %ebx
addl %ebx, %eax
ret
Ceci est mon programme C. J'essaie d'appeler le programme d'assemblage du programme C.
#include <stdio.h>
int add(int a, int b);
int main() {
int res = add(5,6);
printf("%d",res);
return 0;
}
Mais le code ci-dessus me donne un défaut de segmentation. Quelle est l'origine de cette erreur et comment la réparer?
Si vous créez la même fonction dans C, comment le compilateur de générer du code pour cela? Est-ce qu'il fait une configuration de pile qui vous manque? Est-ce qu'il sauvegarde les registres qu'il utilise pour ne pas les écraser (peut-être sont-ils utilisés ailleurs)? –
Ceci est étiqueté avec 'x86-64'. Si cela est vrai, ce n'est pas ainsi que les arguments sont transmis sur cette architecture dans un ABI dont je suis au courant. Quel est le système d'exploitation et l'architecture sur lesquels cela est compilé? Comment est-il compilé et lié? (L'écrasement se produit probablement parce que la lecture de (% esp) est mauvaise car elle est supposée être% rsp). – Art
Je suis d'accord avec Art. Compilez-vous ceci en code 32 ou 64 bits? –