我正在尝试在 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 GB。即使是 64 位代码。也可以从 executable file format 中看到,IMAGE_OPTIONAL_HEADER64.SizeOfImage 字段也仍然是 DWORD。
关于c++ - 如何在 64 位应用程序中获取模块大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800000/