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