gpt4 book ai didi

function - 对函数地址使用 JMP 有何影响?

转载 作者:行者123 更新时间:2023-12-01 17:36:45 24 4
gpt4 key购买 nike

我正在查看 IDA 中的一个程序,试图弄清楚某个函数是如何工作的,这时我遇到了这样的事情:

; C_TestClass::Foo(void)
__text:00000000 __ZN14C_TestClass7FooEv proc near
__text:00000000 jmp __ZN14C_TestClass20Barr ; C_TestClass::Barr(void)
__text:00000000 __ZN14C_TestClass7FooEv endp
__text:00000000

谁能向我解释一下在这种情况下跳转到函数到底会做什么?我猜它充当其他函数的包装器?

最佳答案

您是对的,跳转通常是有效处理非内联包装函数的一种方法。

通常,您必须读取所有函数参数并将它们推回堆栈,然后才能调用子函数。

但是当包装函数具有完全相同的原型(prototype)时:

  1. 相同的调用约定
  2. 相同的参数(且顺序相同)
  3. 相同的返回类型

不需要所有常见的函数调用开销。您可以直接跳到目标。 (这些类别可能不是完全必要的,因为在其他一些情况下它仍然是可能的。)

调用包装函数时设置的所有参数(无论是在堆栈上还是寄存器上)都已经就位(并且兼容)用于子函数。

关于function - 对函数地址使用 JMP 有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546291/

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