assembly - 更改退货地址 AT&T 大会
问题描述
我在下面有一个组装功能。由于我正在尝试做的事情,这个函数返回到 C 中的代码,但它是调用我的汇编函数的代码行,导致无限循环。这是我的功能:
disableDivideZero:
pushl %ebp
movl %esp, %ebp
call dividebyzero
movl %ebp, %esp
popl %ebp
ret
我将如何更改返回地址,使其跳过当前返回的指令?
在我的函数返回之前,我已经尝试过 addl $4, 4(%ebp) 。
提前道歉,我是组装新手。我在 x86 32 位
解决方案
在你的函数返回之前,你已经弹出了前一个函数ebp
的帧指针。您需要将 add 放在 the之前,以便 仍指向此框架。popl %ebp
ebp
此外,添加到返回地址的正确偏移量是 4 - x86 指令的长度是可变的,因此您需要知道要跳回的指令的长度 - 并且在 x86 中解码指令长度并不容易一。