使用Module32First得到一个模块的modBaseAddr没有返回

问题描述 投票:0回答:1

我希望得到一个处理模块的基本地址,这样我就可以开始通过其内存为特定值搜索。我使用Module32First拿到第一模块,然后从MODULEENTRY32打印baseaddr出来,但似乎什么都没有。

我瞄准另一个过程,我写的,它只是打印出了一些东西。我能够顺利拿到它的句柄,以及一个快照句柄。这两个过程是32位的。我试着打印出MODULEENTRY32的其他成员如th32ProcessID和modBaseSize,所有这些都做的返回值。只有modBaseAddr是空的。

我一直在寻找通过的文件,它一定有什么错我的代码。下面是相关片段:

std::cout << "Modules Base Address: " << modStruc.modBaseAddr << std::endl;

我希望打印出第一模块的基本地址,但实际产量是空的(如无显示)。我Module32First的理解是,它复制了第一模块进入到我的MODULEENTRY32 modStruc,在那之后我打印出它的modBaseAddr成员。

更新类似问题的人:我还没有找到一个解决方案,我特别的困境,但我既然切换到使用GetModuleInformation这也给了一个模块加载地址,入口点和大小。

c++ winapi
1个回答
2
投票

MODULEENTRY32::modBaseAddrBYTE*实际上是unsigned char*

std::cout::operator<<unsigned char*将尝试打印它作为一个字符串的重载。

要打印您需要将其转换为整数类型,例如实际地址:

std::cout << "Modules Base Address: " << reinterpret_cast<DWORD_PTR>(modStruc.modBaseAddr) << std::endl;

你可以看到在行动here的这个例子。

© www.soinside.com 2019 - 2024. All rights reserved.