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

时间:2013-09-14 08:50:12

标签: 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版本或其他方式来返回此信息?

1 个答案:

答案 0 :(得分:2)

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

是的,作为DWORD的modBaseSize告诉您模块永远不会超过4千兆字节。即使在64位代码中也是如此。从executable file format也可以看到,IMAGE_OPTIONAL_HEADER64.SizeOfImage字段仍然是DWORD。