项目想通过DLL内部代码实现获取本DLL的模块库,但不知道本DLL的名称
最简单的方法是考虑getmodulehandle(null ),可以吗?
//自己://DLL代码(testDll ) :boolapientrydllmain ) hmodulehmodule,DWORD ul_reason_for_call, lpvoidlpreserved (switch (ul _ reason _ for _ call ) casedll_process_attach: ) hmodule hmodule=getmodulehadadaled 通过调用sprintf_s(wszhModule,L'DLL中的getmodulehandle ) null )获取的地址为:0x%x ),( (DWORD ) hmodule ); messageboxw(0,wszhModule,l '提示',0 ); } case dll _ thread _ attach : case dll _ thread _ detach : case dll _ process _ detach : break; } return TRUE; } //EXE代码(test ) :int_tmain ) intargc,_TCHAR* argv[] () (loadlibrary ) L'testdll ' ); 返回0; }
结论:
在DLL内部调用getmodulehandle(null ),获得主模块(EXE )基地址
实际上,我们非常理解getmodulehandle(null )最终会在进程空间中调用