一旦进程加载到内存中,我就试图获取它的图像库。根据我的理解,您可以调用 GetModuleHandle 来获取图像库。我的问题是,返回的句柄本质上是否指向 IMAGE_DOS_HEADER 结构,以便您可以执行以下操作:
PIMAGE_DOS_HEADER DosHeader;
DosHeader = (PIMAGE_DOS_HEADER)GetModuleHandle(NULL);
如果这不正确,您还可以使用什么其他方法?
这是正确的,但如果您想要 dll 的模块句柄,则需要指定其路径。否则你将获得进程exe的句柄。您还应该检查返回的HMODULE
首先看看它是否有效。
如何获取模块的虚拟大小的示例:
std::size_t GetModuleSize(const char* szModule)
{
HMODULE hModule = GetModuleHandle(szModule);
if(hModule == NULL) return 0;
IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*)hModule;
IMAGE_NT_HEADERS* pNTHeaders =(IMAGE_NT_HEADERS*)((BYTE*)pDOSHeader + pDOSHeader->e_lfanew);
return pNTHeaders->OptionalHeader.SizeOfImage;
}
你会注意到我用IMAGE_DOS_HEADER*
并不是PIMAGE_DOS_HEADER
因为我发现它更具可读性和清晰性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)