【问题标题】:How to hook a function from the same process and get the address of the caller function?如何从同一进程中挂钩一个函数并获取调用者函数的地址?
【发布时间】:2013-04-26 19:12:06
【问题描述】:

我需要这样做以避免从注入的代码中调用我的进程的函数。

所以想挂钩这个函数来检查调用是来自当前模块还是来自外部模块,然后我将调用指令的地址与模块地址范围进行比较。

谢谢

【问题讨论】:

  • 您不能在标准 C++ 中执行此操作。您需要指定一个平台。
  • 我不明白为什么我不能使用标准 C++!我认为有一些 API 允许使用函数挂钩,并且可能会提供一些有关堆栈的信息
  • 如果我必须使用一些额外的库,所以它应该是免费且稳定的库,谢谢,
  • 标准 C++ 没有堆栈的概念。
  • 那么,有没有办法控制调用函数地址范围呢?我必须检测是否收到来自外部函数的调用。

标签: c++ hook function-pointers


【解决方案1】:

MSVC 有一个内在的_ReturnAddress,它给出了函数调用者的返回地址, 所以你可以在受保护函数的最开始调用它,并将它与指定的模块(基数,长度)进行比较,以检测是否允许执行函数的左侧部分。

【讨论】:

  • 感谢您的回复,如果我hook了一个函数,并且我的hook回调在调用hook函数后被调用,这个函数在回调函数中会返回什么?是挂钩函数的地址还是我无法测试的调用者,因为我仍然不知道如何挂钩函数。谢谢
猜你喜欢
  • 2019-09-07
  • 1970-01-01
  • 2020-03-28
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多