gpt4 book ai didi

winapi - 我可以从另一个进程卸载 DLL 吗? (Win32)

转载 作者:行者123 更新时间:2023-12-03 21:41:32 25 4
gpt4 key购买 nike

我想从另一个进程中卸载一个 DLL。是否可以?
如果是,该怎么做? (我正在使用 Win32 API)

非常感谢你。

最佳答案

是的,这是可能的。它被称为 DLL 弹出,并且由一些 DLL 注入(inject)器提供。通常加载 DLL 的方式是通过 LoadLibrary随后通过 FreeLibrary 卸载. FreeLibrary只接受一个参数,它是要卸载的模块的句柄。如果您首先注入(inject)了 DLL,您应该能够很容易地找到它。否则有获取句柄的方法如CreateToolHelp32Snapshot进一步列举 Module32First/Module32Next .假设你已经通过某种方式获得了句柄,那么弹出DLL的步骤就很简单了:

  • 获取FreeLibrary的地址与 GetProcAddress .由于 Windows 的工作方式,此地址将与目标中相同功能的地址匹配。
  • 调用 CreateRemoteThread在目标进程上,指定 lpStartAddress作为FreeLibrary的地址, 和 lpParameter作为模块的句柄

  • DLL 弹出有几个注意事项。
  • 您应该只弹出一个您确定将来没有代码会再次使用的 DLL。如果任何动态链接的代码在被释放后尝试调用您的代码,它很可能会触发某种形式的页面访问冲突。
  • 您应该确保在出于类似原因执行弹出时没有线程在 DLL 的代码中执行。

  • 一般 应避免 DLL 弹出.如果库想要有被释放的选项,它应该提供一些用户可以访问它的接口(interface),最终调用 FreeLibraryAndExitThread。 .

    如果您需要一个代码示例,我已经编写了一个喷射器作为我过去用 C 编写的喷射器的一部分。我可以搜索它并找到它,但它是多年前的,代码质量不太可能好的。

    关于winapi - 我可以从另一个进程卸载 DLL 吗? (Win32),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832381/

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