如何在64位应用程序中获取模块大小

How to get module size in 64Bit application?

本文关键字:获取 模块 应用程序 64位      更新时间:2023-10-16

我正在尝试在C++ 64 位应用程序中获取模块的大小,其代码如下所示。

MODULEENTRY32 me32; 
memset( &me32, 0x0, sizeof( MODULEENTRY32 ) );
DWORD base = (DWORD)me32.modBaseAddr;
DWORD moduleSize= (DWORD)me32.modBaseSize ;

我用 32 位成功测试了这个,但在 64 位上没有运气。由于它是 64 位,我认为 DWORD 可能不足以存储诸如整个模块大小之类的值。

进一步阅读后,我发现uintptr_t更适合如此高的值,但由于 me32.modBaseSize 返回 DWORD,我认为它不适用于 x64。

我可以使用什么替代方法来获取modBaseSize,是否有此函数的x64版本或其他返回此信息的方法?

将 modBaseAddr 转换为 (DWORD) 是不正确的。 它被声明为 BYTE*,指针值在 64 位模式下为 8 个字节。 请确保将代码构建为 x64,以便在 64 位操作系统上获取此字段的有意义的值。

是的,modBaseSize是一个DWORD,告诉你一个模块永远不能大于4千兆字节。 即使在 64 位代码中。 从可执行文件格式(IMAGE_OPTIONAL_HEADER64)也可见。SizeOfImage 字段也仍然是一个 DWORD。