gpt4 book ai didi

winapi - 链接到 Windows API 的 PatchAPI

转载 作者:行者123 更新时间:2023-12-02 01:10:18 25 4
gpt4 key购买 nike

我想使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com