Assembly 奇怪的分段故障,程序集(x86)
我有以下x86代码:Assembly 奇怪的分段故障,程序集(x86),assembly,x86,Assembly,X86,我有以下x86代码: .section .rodata .text subl $440, %esp movl %esp, %ecx subl $24, %esp .globl main .type main, @function main: pushl %ebp movl %esp, %ebp andl $-16, %esp movl $1, %eax
.section .rodata
.text
subl $440, %esp
movl %esp, %ecx
subl $24, %esp
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
movl $1, %eax
movl $4, %edx
imul %edx, %eax
movl $2, %edx
addl %ecx, %eax
movl %edx, 24(%eax)
movl $0, %eax
nop
leave
ret
.size main, .-main
该程序在使用gcc编译时给出了转储的分段错误核。但是,删除movl%edx、24%eax会删除错误。我是装配新手,请告诉我我做错了什么 您在主标签之前有代码,因此代码不会执行,但将是必需的,因为这是在设置ecx。您应该将这3行下移到andl$-16、%esp行之后。作为对删除的注释的回复,该注释询问将代码移动到main的开头:如您所见,这是允许的,但不起作用。这种情况下的错误将出现在函数末尾,因为您没有正确恢复堆栈。ebp由LEVE指令使用,因此必须将其设置为esp.@Jester的初始值。但是,我想在执行main之前更改堆栈指针,我不想在序言中更改堆栈指针。有办法吗?请把你的答复作为答复贴出来,这样我就可以接受了。