哈哈,PE的确是相当地复杂
下面从两个函数开始说起吧
HMODULE LoadLibrary(
LPCTSTR lpFileName // file name of module
);
返回值是啥?msdn文档上面这么说
“If the function succeeds, the return value is a handle to the module.”
如果你仅仅知道返回值是一个模块句柄,那么你被蒙蔽了,只知其一,不知其二。
让我们再来研究一下,HMODULE这个值代表什么
Debug一下程序,你会惊奇地发现,他就是DLL在进程中的加载地址。呼呼,再来
回想一下DLL里面的导出函数(一般在Def文件中定义),我们用VC-Depends可以很容易
看到DLL中的导出函数,以及导出函数在相对地址(相对于DLL加载地址的偏移量)。
最后,我们再来看看DLL显示加载时,一般需要配合使用的函数
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // function name
);