我试图在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版本或其他方式来返回此信息?
答案 0 :(得分:2)
将modBaseAddr转换为(DWORD)不正确。它被声明为BYTE *,指针值在64位模式下是8个字节。请确保将代码构建到x64,以便在64位操作系统上为此字段获取有意义的值。
是的,作为DWORD的modBaseSize告诉您模块永远不会超过4千兆字节。即使在64位代码中也是如此。从executable file format也可以看到,IMAGE_OPTIONAL_HEADER64.SizeOfImage字段仍然是DWORD。