gpt4 book ai didi

c++ - 使用 GetModuleHandle 获取指向 IMAGE_DOS_HEADER 的指针?

转载 作者:可可西里 更新时间:2023-11-01 11:21:55 25 4
gpt4 key购买 nike

一旦我的进程加载到内存中,我就试图获取它的图像库。据我了解,您可以调用 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,因为我发现它更具可读性和清晰度。

关于c++ - 使用 GetModuleHandle 获取指向 IMAGE_DOS_HEADER 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6126980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com