DLL卸载自身
如果使用 FreeLibrary卸载自身DLL的话会出现一个问题,在 FreeLibrary 之后,该 DLL 的地址空间就不再可用了,但这时 EIP 指针仍然会指向 FreeLibrary 的下面一句,于是程序就会崩溃。所幸,Win32 提供了另外的一个 API——FreeLibraryAndExitThread,这个函数能够在销毁 DLL 之后直接调用 ExitThread,这样一来 EIP 指针就不会指向非法的地址了。[cpp]
#include <Windows.h>
HMODULE g_hDll = NULL;
DWORD WINAPI UnloadProc(PVOID param)
{
MessageBox(0,"test","test",0);
FreeLibraryAndExitThread(g_hDll,0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID lpvReserved)
{
if (DLL_PROCESS_ATTACH == fdwReason)
{
g_hDll = (HMODULE)hinstDLL;
HANDLE hThread = CreateThread(NULL, 0, UnloadProc, NULL, 0, NULL);
CloseHandle(hThread);
}
return TRUE;
}
补充:软件开发 , C++ ,