包装 DLL 完美运行 - 以下是它的工作原理:
让我们假设,library.dll
导出int somefunct(int i, void* o)
- 您现在创建自己的 DLL,类似于
#include <windows.h>
//Declare this for every function prototype
typedef int (*int_f_int_pvoid)(int,void*);
//Declare this for every function
int_f_int_pvoid lib_somefunct
//this snipplet goes into dllmain
...
HINSTANCE hlibdll = LoadLibrary("X:\PATH\TO\renamed_library.dll");
//For every function
lib_somefunct=(int_f_int_pvoid)GetProcAddress(hlibdll,"somefunct");
...
//Again for every function
int somefunct(int i, void* o)
{
//Log the function call and parameters
//...
//Call library.dll
int result=lib_somefunct(i, o);
//Log the result
//...
return result;
}
导出您的函数,library.dll
在将原始文件重命名为后命名生成的 DLLrenamed_library.dll
现在目标 EXE 将加载 (your) library.dll
,而后者又将加载(原始的,但已重命名)renamed_library.dll
- 每当目标程序调用一个函数时,它都会运行您的登录代码。
警告:您的 traget EXE 可能是多线程的,因此请准备好拥有线程安全的日志记录机制。
我已成功使用此方法调试了一个奇怪的 MAPI 问题。