Я пытаюсь связать сборку x86 и C.
Моя C программа:
extern int plus_10(int);
# include <stdio.h>
int main() {
int x = plus_10(40);
printf("%d\n", x);
return 0;
}
Моя программа сборки:
[bits 32]
section .text
global plus_10
plus_10:
pop edx
mov eax, 10
add eax, edx
ret
Я компилирую и связываю их следующим образом:
gcc -c prog.c -o prog_c.o -m32
nasm -f elf32 prog.asm -o prog_asm.o
gcc prog_c.o prog_asm.o -m32
Однако, когда я запускаю полученный файл, я получаю ошибку сегментации.
Но когда я заменяю
поп-эдкс
с
mov edx, [esp + 4]
программа работает отлично. Может кто-нибудь объяснить, почему это происходит?