调用未记录的函数

时间:2018-07-27 11:22:53

标签: c++ windows dll hook

我需要调用一个未记录的函数-

struct SomeStruct Func(wchar_t *, bool);

现在的问题是我没有SomeStruct的定义。我不需要SomeStruct的定义,只需要调用该函数即可。

如何调用此函数或弄清楚SomeStruct的大小,以便我可以分配struct的内存?

我的假设是我可以分配一个struct,它占用的内存与SomeStruct相同,然后我可以调用该函数并将返回值保存在该温度struct中。

到目前为止,调用此函数时崩溃。

为什么我需要这个是因为我想挂接此函数并在发生这种情况时拦截该调用。现在,要挂接一个函数,您需要将完全相同的内存返回给调用方,以免最终破坏堆栈。

我通过查看进程返回的内存以及一些命中和尝试来算出结构大小。

我知道这也可以通过直接从堆栈读取寄存器来完成,但是到目前为止我还不知道。

一旦我确定我将在此处发布解决方案。

1 个答案:

答案 0 :(得分:2)

它可能取决于编译器,但是当调用返回结构的函数时,调用者在其自己的堆栈中为该结构分配空间,然后将其指针作为隐藏参数传递给被调用者。被调用者使用此指针填充struct字段,然后返回。如果调用者没有分配足够的空间来保存返回值,则显然在调用者代码中可能发生堆栈损坏。 然后,调用者将使用返回的struct中所需的任何内容,并根据需要释放分配的空间。

因此,如果是这种情况,请发明一个足够大而不会导致数据损坏的SomeStruct,然后调用该函数。