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;   
}   

  


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值