- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用Windows API's PatchAPI为了应用一些补丁。补丁的应用是在 mspatcha.dll 中实现的,它应该位于系统的 system32 文件夹中。
在阅读了各个地方(例如他们的引用文献和谷歌搜索)之后,我还没有找到链接到该 DLL 的正确方法。我想静态链接,处理 LoadLibrary 看起来很困惑,并且有点违背了 patchapi.h header 的目的。由于我没有找到要链接的 .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|find "ApplyPatchToFileExA"
_ApplyPatchToFileExA
除非我错了,否则这表明 lib 导出的函数使用 cdecl,而 dll 使用 stdcall(或者至少将函数声明为 _stdcall)。请参阅:C name decoration in Microsoft Windows .
我的问题是:在我的应用程序中使用 mspatcha.dll 的正确方法是什么?我从 dll 创建 lib 以便进行静态链接的过程出了什么问题?
我的终端的详细输出可以在这里找到:http://pastebin.com/q4FV4Se6
最佳答案
作为术语点,您试图隐式链接而不是静态链接,这意味着完全不同的东西。
如果您确实无法获取 .lib 文件,那么生成该文件的一种简单方法是为每个函数创建一个带有空 stub 的虚拟 DLL。调用 DLL mspatcha.dll。确保使用 .def 文件和 stdcall。
构建 DLL 后,将其扔掉,但保留 .lib 文件!
我过去曾这样做过,为使用不生成 .lib 文件的工具链构建的 DLL 生成 .lib 文件。
您使用的技术仅适用于 cdecl 函数。
关于winapi - 链接到 Windows API 的 PatchAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709464/
我想使用Windows API's PatchAPI为了应用一些补丁。补丁的应用是在 mspatcha.dll 中实现的,它应该位于系统的 system32 文件夹中。 在阅读了各个地方(例如他们的引
我是一名优秀的程序员,十分优秀!