我想使用Windows API 的 PatchAPI来应用一些补丁。补丁的应用是在 mspatcha.dll 中实现的,它应该位于一个人的 system32 文件夹中。
在阅读了各个地方(例如他们的 ref 和谷歌搜索)之后,我还没有找到链接到这个 DLL 的正确方法。我想静态链接,处理 LoadLibrary 似乎很混乱,有点违背了他们的 patchapi.h 标头的目的。由于我没有找到要链接的 .lib 文件,因此我使用以下命令创建了自己的文件:
1) 转储箱 /exports C:\windows\system32\mspatcha.dll
2) 创建一个 mspatcha.def 文件,写一个“EXPORTS”行,然后为出现在 dumpbin 输出中的每个函数名写一行
3) 库 /def:mspatcha.def /out:mspatcha.lib
虽然我确定这不是与 patchapi 进行静态链接的正确方法,但我还没有找到正确的方法。无论如何,在执行了这些步骤并编写了一个由单个调用 ApplyPatchToFileExA() 构成的简单测试用例之后,我仍然在符号 _ApplyPatchToFileA@16 上收到链接器错误。查看我新创建的 mspatcha.lib 的导出符号,这些函数似乎使用了错误的命名约定
D:\tmp\mspatcha>dumpbin /exports mspatcha.lib|找到“ApplyPatchToFileExA”
_ApplyPatchToFileExA
除非我错了,否则这表明 lib 使用 cdecl 导出函数,而 dll 使用 stdcall(或至少将函数声明为 _stdcall)。请参阅:Microsoft Windows 中的 C 名称修饰。
我的问题是:在我的应用程序中使用 mspatcha.dll 的正确方法是什么,以及我从 dll 创建库以便进行静态链接的过程有什么问题?
我的终端的详细输出可以在这里找到:http: //pastebin.com/q4FV4Se6