在Win32 C++中调用未导出的函数

use*_*875 2 c++ winapi function

我如何在Win32 C++中调用未导出的函数?

bk1*_*k1e 6

调用与代码在同一模块(DLL/EXE)中定义的未导出函数很简单:只需像调用任何其他C++函数一样调用它们.显然这不是你所要求的.如果要在不同的模块中调用未导出的函数,则需要以某种方式查找其地址.

一种方法是让第一个模块在第二个模块中调用导出的函数,该模块返回一个函数指针.(或者:包含函数指针的结构,指向类实例的指针等).考虑工厂模式.

另一种方法是从第一个模块导出注册函数,并让第二个模块的初始化代码调用它,将指针传递给未导出的函数以及某种识别信息.(最好还有一个相应的注销功能,在卸载第二个模块之前调用它.)

另一种方法是使用调试符号dbghelp.dll.这不适用于实际应用,因为它需要分发调试符号,并且速度极慢,更不用说过于复杂了.

  • @bk1e:我用 IDA pro 反汇编了它,它在函数选项卡下被列为 sub_6f0017ae,在反汇编的代码中,它也是用调用指令执行的。 (2认同)