AYC*_*CKS 2 x86 assembly segmentation-fault att stack-pointer
使用汇编代码,想知道为什么我的subl $ 8,%esp指令出现段错误?
pushl %ebp
movl %esp, %ebp
movl 16(%ebp), %esi
movl 12(%ebp), %edi
movl 8(%ebp), %eax
movl $0, %ebx
subl $8, %esp
jmp .LL1
.LL1:
cmpl %ebx, %esi
je .LL2
movl %ebx, 4(%esp)
movl %eax, (%esp)
addl $1, %ebx
jmp .LL1
.LL2:
popl %ebp
ret
Run Code Online (Sandbox Code Playgroud)
在subl $ 8上出现segfault,%esp
您确定代码段错误subl $8, %esp吗?
在您的代码中,您从堆栈指针中减去了8,但从未恢复该值。执行时,返回的地址不再是堆栈中的最新内容ret。
指令
movl %esp, %ebp
Run Code Online (Sandbox Code Playgroud)
将的原始值复制%esp到%ebp。返回时,您将还原%ebpwith 的原始内容popl,但从不还原%esp,因此您将返回到一些垃圾地址。
上线前
popl %ebp
Run Code Online (Sandbox Code Playgroud)
加
movl %ebp, %esp
Run Code Online (Sandbox Code Playgroud)
在返回之前更正堆栈指针。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |