使用GetModuleHandle获取指向IMAGE_DOS_HEADER的指针?

问题描述

| 一旦将其加载到内存中,我将尝试获取进程的映像库。据我了解,您可以调用GetModuleHandle来获取图像库。我的问题是,返回的句柄是否实质上指向IMAGE_DOS_HEADER结构,以便您可以执行以下操作:
PIMAGE_DOS_HEADER DosHeader;
DosHeader = (PIMAGE_DOS_HEADER)GetModuleHandle(NULL);
如果这不正确,您还可以使用其他什么方法?     

解决方法

这是正确的,但是如果要dll的模块句柄,则需要指定其路径。否则,您将获得进程exe的句柄。您还应该先检查返回的ѭ1,以确保其有效。 如何获取模块虚拟大小的示例:
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
,因为我发现它更易读和清楚。     ,借助Microsoft的编译器和链接器,您可以使用
extern \"C\" IMAGE_DOS_HEADER __ImageBase;
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...