【发布时间】:2012-07-30 06:12:54
【问题描述】:
我有一个使用 CreateRemoteThread/LoadLibrary 方法注入自身的 DLL。
在调试和开发 DLL 时,退出目标应用程序并重新启动它(它的加载时间为 10-20 秒)很麻烦,所以我想在检查我的代码是否有效后卸载 DLL , 重新编译/重新注入它。
我想避免创建一个带有用于加载和卸载该 DLL 的框架的新 DLL。
这怎么可能?
【问题讨论】:
-
您需要执行与注入代码以加载库时相同的方式,不同之处在于您需要注入代码以在其自己的进程上下文中卸载库。在不再需要库后注入代码。这应该在您仍然可以控制的最后一个函数中完成。但是,您将需要汇编知识来制作 library unloader 代码。
-
它是什么类型的 DLL?并且您可以控制调用应用程序吗?如果是 COM,您可以了解引用计数。如果你能控制宿主,只要释放它并调用
FreeLibrary()。 -
@Deanna:没错,就是这么简单!
-
我可以控制进行注入的进程,但不能控制被注入的进程。我的下一个问题是,我从 DllMain 生成一个线程来完成它的工作,当我告诉线程结束时,我是否最后调用 FreeLibrary(GetModuleHandle(L"My.dll"))?
标签: winapi visual-c++ dll dll-injection