链接到Windows API的PatchAPI

| 我想使用Windows API的PatchAPI来应用一些补丁。 修补程序的应用是在mspatcha.dll中实现的,该文件应该位于一个人的system32文件夹中。 在各个地方(例如ref和谷歌搜索)阅读后,我还没有找到链接到此DLL的正确方法。我想静态链接,处理LoadLibrary看起来很杂乱,这有点打乱了他们的patchapi.h标头的目的。由于没有找到要链接的.lib文件,因此我使用以下命令创建了自己的文件: 1)dumpbin / exports C:\\ windows \\ system32 \\ mspatcha.dll 2)创建一个mspatcha.def文件,写一个\“ EXPORTS \”行,然后对出现在dumpbin输出中的每个函数名写一行 3)lib /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创建lib以便我可以进行静态链接的过程出了什么问题? 我的终端的详细输出可以在这里找到:http://pastebin.com/q4FV4Se6
已邀请:
作为术语,您尝试隐式而非静态链接,这意味着完全不同。 如果您真的无法保存.lib文件,则一种简单的生成方法是使用每个函数的空存根创建一个虚拟DLL。调用DLL mspatcha.dll。确保使用.def文件和stdcall。 构建DLL后,将其丢弃,但保留.lib文件! 过去,我已经为使用不发出.lib文件的工具链构建的DLL生成.lib文件。 您使用的技术仅适用于cdecl函数。

要回复问题请先登录注册