函数正在返回堆栈中的某个位置

逆向工程 C
2021-07-09 17:06:18

我正在尝试挂钩这个“接收回调”函数,并且可以设法挂钩该函数。然而,当“新函数”应该返回给它的调用者时,它反而返回到堆栈中的某个地方,导致在执行操作码时发生访问冲突,这些操作码实际上是堆栈上的一些数据。

我一直试图调试这个几个小时,但一无所获。如果有人确实遇到过类似的问题并且可以向我指出可能的解决方案,我将不胜感激。

如果您知道可能是什么问题的线索并需要有关任何事情的更多信息,请告诉我,我会尽力提供最好的。

更新 1

来自 IDA 的函数信息: 在此处输入图片说明

我的功能: 在此处输入图片说明

还需要指出我可以使用以下方法调用原始函数(非挂钩):

on_recv((char*)buf, ARRAYSIZE(buf), 0, 0x0018F7AC);

还尝试将 myOnRecv 更改为 __cdecl 和 __fastcall 但也没有运气。

更新 2

在进一步调试后,我认为该函数正在返回作为第 4 个(最后一个)参数传递的任何内容。这可能是什么原因?

1个回答

正如杰森·格夫纳所怀疑的那样。我的函数原型是正确的,但 pOnRecv typedef 中没有 __stdcall。

直到我查看了函数的组装并看到它确实添加到 esp. 我把它留在这里,以防万一其他人发生了类似的问题。