首页 > 解决方案 > 调用未记录的函数

问题描述

我需要调用一个未记录的函数,它看起来像 -

struct SomeStruct Func(wchar_t *, bool);

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

如何调用此函数或计算 的大小SomeStruct以便分配 的内存struct

我的假设是我可以分配一个与调用函数struct相同的内存,SomeStruct并且返回值可以保存在那个 temp 中struct

截至目前,它在调用此函数时崩溃。

为什么我需要这个是因为我想挂钩这个函数并在发生这种情况时拦截调用。现在要挂钩一个函数,您需要将完全相同的内存返回给调用者,这样它就不会最终破坏堆栈。

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

我知道这也可以通过直接从堆栈中读取寄存器来完成,但我现在还不知道。

一旦我弄清楚了,我会在这里发布解决方案。

标签: c++windowsdllhook

解决方案


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

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


推荐阅读