首页 > 解决方案 > 更改退货地址 AT&T 大会

问题描述

我在下面有一个组装功能。由于我正在尝试做的事情,这个函数返回到 C 中的代码,但它是调用我的汇编函数的代码行,导致无限循环。这是我的功能:

disableDivideZero:
        pushl %ebp 
        movl %esp, %ebp 
        call dividebyzero
        movl %ebp, %esp 
        popl %ebp 
        ret

我将如何更改返回地址,使其跳过当前返回的指令?

在我的函数返回之前,我已经尝试过 addl $4, 4(%ebp) 。

提前道歉,我是组装新手。我在 x86 32 位

标签: assemblyx86

解决方案


在你的函数返回之前,你已经弹出前一个函数ebp的帧指针。您需要将 add 放在 the之前,以便 仍指向此框架。popl %ebpebp

此外,添加到返回地址的正确偏移量是 4 - x86 指令的长度是可变的,因此您需要知道要跳回的指令的长度 - 并且在 x86 中解码指令长度并不容易一。


推荐阅读