我有一个使用 CreateRemoteThread/LoadLibrary 方法注入自身的 DLL。
在调试和开发DLL时退出目标应用程序并重新启动它很麻烦(它的加载时间为10-20秒),所以我想在检查我的代码是否有效后卸载DLL,重新编译/重新注入它。
我想避免使用用于加载和卸载所述 DLL 的框架创建新的 DLL。
这怎么可能?
我有一个使用 CreateRemoteThread/LoadLibrary 方法注入自身的 DLL。
在调试和开发DLL时退出目标应用程序并重新启动它很麻烦(它的加载时间为10-20秒),所以我想在检查我的代码是否有效后卸载DLL,重新编译/重新注入它。
我想避免使用用于加载和卸载所述 DLL 的框架创建新的 DLL。
这怎么可能?
在DllMain产生一个线程的情况下,并且当该线程完成它正在做的任何事情时,您可以使用FreeLibraryAndExitThread:
FreeLibraryAndExitThread 函数允许在 DLL 中执行的线程安全地释放它们正在执行的 DLL 并自行终止。如果他们分别调用 FreeLibrary 和 ExitThread,就会存在竞争条件。可以在调用 ExitThread 之前卸载库。
从那句话中,我用简单的英语声明你不应该在 DllMain 中调用这个函数。