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

标签 c++ process 64-bit

我正在尝试在 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/

相关文章:

c++ - 先前运行正常时 QApplication 构造函数中的永久 sigabrt

Delphi 64 位 Indy OpenSSL 库

c++ - 以错误的方式在子类中调用函数的最佳方法是什么?

c# - 如何在 Windows-CE 中终止进程?

arrays - PowerShell 杀死多个进程

vb.net - 无法杀死excel进程

visual-studio - 如何作为构建后步骤修改内容/替换 .msi 文件的二进制文件?

c++ - 强制 CMake 查找 x64 位库而不是 x32

c++ - 出现 'was not declared in this scope' 错误

c++ - 停止与推力一起使用的 odeint 集成