如何在64位应用程序中获取模块大小
How to get module size in 64Bit application?
我正在尝试在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。
相关文章:
- 获取 LLVM 模块中的所有值
- 无法在 XmlHttpRequest 模块上获取断点(Javascript 引擎/XHR 请求)
- 使用 libunwind 获取模块地址
- 获取模块文件名 Win 7/Win 10 上的不同行为
- 哪种方法更好获取静态链接DLL的模块句柄(HMODULE) - 使用GetModuleHandleEx()或LoadLibrary()?
- 使用 Module32First 获取模块的 modBaseAddr 不返回任何内容
- 如何使用getForegroundWindow函数获取模块
- 获取 .NET 模块的图像大小
- Apache模块-获取请求正文
- 获取传递给子模块(C#.NET dll)中的主模块(VC++ exe)的参数
- 在C++中获取 Linux 内核模块的详细信息
- 获取模块文件名不返回路径
- 从节点.js模块获取 D9025 警告和 C1083 错误...我没主意了
- 如何在64位应用程序中获取模块大小
- 如何获取当前运行模块的sc_module_name
- 从其他进程获取模块句柄
- 嵌入式Python - [_socket获取模块方法,但socket.py:缺少方法]
- 从另一个模块获取派生类指针的接口
- 获取模块大小
- 嵌入式Python:从导入的模块获取func obj