【发布时间】:2013-01-27 18:33:56
【问题描述】:
为了练习,我试图获取某个内存地址指向的地址。我有一个工具,它显示了我必须得到的结果。在我的情况下是:
"clientApp.exe"+0x11F9B08 -> 0E4C5F90
所以我假设这基本上意味着:("The base address of the .exe" + 0x11F9B08) 并且指向地址0x0E4C5F90。
我已经有了 clientApp.exe 的基地址。我为此使用了EnumProcessModules 和GetModuleFileNameEx。
小sn-p
if ( GetModuleFileNameEx( hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
{
if(gameName.compare(szModName))
{
dwClientBase = (DWORD)hMods[i]; //base address
break;
}
}
然后稍后我会尝试获取指向的地址。但以下给了我一个完全不同的结果:
DWORD result = (DWORD)(dwClientBase + 0x11F9B08);
这给了我:23042824。我正在寻找:0x0E4C5F90。我想我已经接近了,但不确定接下来我可以尝试什么。
有人知道我应该怎么做才能获得与 工具 给我的结果相同的结果吗?
【问题讨论】:
-
这取决于 - 您在寻找虚拟地址还是物理地址?
-
0x11F9B08也可能意味着进程的虚拟地址空间中的绝对地址。你试过吗? -
@RageD 实际上我不太确定,我怎么知道?我知道
"clientApp.exe"+0x11F9B08总是一样的。但它指向的地址总是变化的。所以我猜是虚拟地址空间? -
@ybungalobill 我对此还不是很熟悉,所以我不确定我是否知道“你试过了吗?”是什么意思。能详细点吗?
标签: c++ c pointers memory-address