流沙团
LoadLibrary和GetModuleHandle的区别
2018-2-2 流沙团


写代码的时候注意到的,以前没注意这两个函数的用法



主要区别:



LoadLibrary是把一个模块映射进调用进程的地址空间,需要时增加引用计数

而GetModuleHandle是返回一个已经映射进调用进程地址空间的模块的句柄

并不增加引用计数

使用GetModuleHandle可以判断做需要加载的模块是否已经被加载(到调用进程的地址空间).



代码1:



typedef void *(__stdcall *pfVirtualAllocEx)(unsigned long, void *, unsigned long, unsigned long, unsigned long); 
pfVirtualAllocEx MyVirtualAllocEx = NULL;
MyVirtualAllocEx = (pfVirtualAllocEx)GetProcAddress(GetModuleHandle("Kernel32.dll"), "VirtualAllocEx");







代码2:



HINSTANCE hInst = LoadLibrary("User32.DLL"); 
typedef int (WINAPI *MSGBOX)(HWND,LPSTR,LPSTR,UINT);
MSGBOX messagebox=(MSGBOX)GetProcAddress(hInst, "MessageBoxA" );
messagebox(NULL,"123","456",MB_OK);
return 0;



多写一些案例, 会有很多不同的收获!







发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容