简单的工作室

当前位置: 主页>编程技巧>VC++编程>

DLL卸载自身

时间:2014-05-19 13:57来源:未知 作者:admin 点击:
如果使用 FreeLibrary卸载自身DLL的话会出现一个问题,在 FreeLibrary 之后,该 DLL 的地址空间就不再可用了,但这时 EIP 指针仍然会指向 FreeLibrary 的下面一句,于是程序就会崩溃。所幸,Win32 提供了另外的一个 API——FreeLibraryAndExitThread,这个函数能够在销毁 DL
如果使用 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;     
}     
(责任编辑:简单的工作室)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容