用c ++从内存地址获取ptr

时间:2010-02-25 23:47:07

标签: c++ signature

我试图从全局指针获取游戏的引擎版本,但我对此相当新。这是我发现的一个非常小的例子......

http://ampaste.net/mb42243

这是我想要得到的反汇编,指针(gpszVersionString)是突出显示的行(第5行)

http://ampaste.net/m2a8f8887

所以我需要找到的是基本上使用我发现的示例方法来获取它,我是否需要基本上输出函数的第一部分并找到该行的偏移量?

...一样

内存签名 - / x56 / x8B / x35 / x74 / xD5 / x29 / x10 / x68 / x00 / xA8 / x38 / x10 那么到达那条线的偏移量? (不知道如何找到偏移量)

1 个答案:

答案 0 :(得分:5)

你不能直接这样做。流程地址空间对您的流程来说是完全独特的 - 0xDEADBEEF可以在一个流程中指向“Dog”,而0xDEADBEEF可以指向另一个流程中的“Cat”。您必须进行操作系统调用,以允许您访问另一个进程的地址空间,即使这样您也必须猜测。很多时候,每次运行应用程序的位置都不同 - 通常无法预测进程的运行时布局在所有情况下都会是什么。

假设你在Windows上,你需要(编辑:在所有情况下你都不需要A和B,但你通常需要它们)A。是管理员,B。取SeDebugPrivilege您的流程C,open a handle to the process,然后是D.使用ReadProcessMemory / WriteProcessMemory做您想做的事。

希望有所帮助:)

编辑2:看起来你正在查看从反汇编程序中获取的地址。如果是这种情况,则不能使用该地址的值 - 图像可以在运行时重新基础,并且值将完全不同。特别是在最新版本的Windows上支持地址空间布局随机化。