gpt4 book ai didi

assembly - 使用 JMP 代替 CALLS

转载 作者:行者123 更新时间:2023-12-02 21:30:29 25 4
gpt4 key购买 nike

可以使用 JMP 指令跳转到函数的起始地址吗?为什么要这样做?

最佳答案

在 Prinziple 中,只要遵循规则,您可以混合使用 jmp 和 call。 call 自动将返回地址压入堆栈。

 call x
mov eax, 0 <- returns here

x:
do something
ret

这也可以通过以下代码来完成:

 jmp x
:retAdr
mov eax, 0 <- returns here

x:
do something
push retAdr <- Basically it would be similar to a jmp, but of course the target can be calculated as well.
ret

当然,您也可以反过来做。

call x
mov eax, 0

x:
pop eax <- ret adress
do something
jmp eax

虽然这些伪代码示例可能看起来没什么用,但有时在特殊情况下以这种方式使用它们可能会很有用。 jmp 的目标可以是任何地址,因此它也可以是函数或过程。这里没有区别。

我已经看到这在 Ant 调试技术中被用来掩盖返回路径并使逆转变得更加困难。它也可以用于 jmp 表或其他东西。当我在其他地方重新定义现有函数时,我对函数使用了 jmp,然后将代码转发到原始函数(注入(inject)代码)。

关于assembly - 使用 JMP 代替 CALLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22422136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com