DLL卸载自身
如果使用 FreeLibrary卸載自身DLL的話會出現一個問題,在 FreeLibrary 之后,該 DLL 的地址空間就不再可用了,但這時 EIP 指針仍然會指向 FreeLibrary 的下面一句,于是程序就會崩潰。所幸,Win32 提供了另外的一個 API——FreeLibraryAndExitThread,這個函數能夠在銷毀 DLL 之后直接調用 ExitThread,這樣一來 EIP 指針就不會指向非法的地址了。
#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; }
?
總結
- 上一篇: VS2008编写64位程序
- 下一篇: 编写ShellCode