如何获取函数定义的地址?
逆向工程
拆卸
C++
函数挂钩
2021-06-16 23:32:55
1个回答
你得到的地址是从编译器的角度来看的函数定义。看来您正在处理一个启用了增量链接的可执行文件(调试版本中的默认设置)。当增量链接打开时,链接器为所有函数生成跳转存根并引用它们而不是“真正的”函数体;这允许它仅替换跳转以指向下一个链接上的新/更新的函数体,而不必更新对该函数的所有其他引用(因为它们都转到跳转),从而加快了链接速度,尤其是对于大型项目.
因此,您有以下选择:
- 在禁用增量链接的情况下编译目标。
- 检测这种情况(例如检查第一个字节是否为 E9)并跟随跳转到实际的函数体。
- 修补跳跃以指向您的钩子,然后跳回最终目标。




