我在汇编中有以下代码:
.section .text
.global _start
_start:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $4, -4(%ebp)
movl $6, -8(%ebp)
mov $0, %eax
leave
ret
理论上与以下C代码相同:
int(main) {
int a = 4;
int b = 6;
return 0;
}
但是,使用以下命令运行编译和链接的汇编代码时出现分段错误:
as -32 main.asm -o main.o
ld -melf_i386 -o main main.o
另外,如果我使用objdump
将C对象文件转换为程序集并使用该代码(看起来完全相同)。这一切都会导致分段错误。
我错过了什么或者原因在于我尝试运行32位汇编和64位虚拟Ubuntu机器?