我正在尝试将x86程序集和C链接。
我的C程序:
extern int plus_10(int);
# include <stdio.h>
int main() {
int x = plus_10(40);
printf("%d\n", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的汇编程序:
[bits 32]
section .text
global plus_10
plus_10:
pop edx
mov eax, 10
add eax, edx
ret
Run Code Online (Sandbox Code Playgroud)
我编译并链接两个如下:
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
Run Code Online (Sandbox Code Playgroud)
但是,当我运行结果文件时,出现了分段错误。
但是当我更换
流行版
与
mov edx,[esp + 4]
该程序工作正常。有人可以解释为什么会这样吗?