从内存指针(基址)读取数据 我昨天刚开始看C++,在看了7小时的游戏黑客教程,但是我的目标不是为了玩一个游戏,而是看看我是否可以创建一个自动化系统或者一个(BOT)来为我做事情。然而,这仅仅是一种学习体验

从内存指针(基址)读取数据 我昨天刚开始看C++,在看了7小时的游戏黑客教程,但是我的目标不是为了玩一个游戏,而是看看我是否可以创建一个自动化系统或者一个(BOT)来为我做事情。然而,这仅仅是一种学习体验,c++,pointers,memory,dll,C++,Pointers,Memory,Dll,目前,我了解如何获取基本指针,什么是多级指针,以及如何写入内存,但是我还没有找到任何关于从内存中读取数据的合适信息 对于这个项目,我正在使用一个DLL,它被注入到我正在使用的软件中。我想从内存中收集一些数据。我已经花了一些时间为我想在Windows应用程序窗体上显示的一些变量找到了静态指针。(如健康等) 经过大量的实验和数小时的研究,我终于想出了这段代码 DWORD HPValue = *(DWORD*)(*(DWORD*)0x302DD0E8 + 0x84C); 但是,这会立即使我的应用

目前,我了解如何获取基本指针,什么是多级指针,以及如何写入内存,但是我还没有找到任何关于从内存中读取数据的合适信息

对于这个项目,我正在使用一个DLL,它被注入到我正在使用的软件中。我想从内存中收集一些数据。我已经花了一些时间为我想在Windows应用程序窗体上显示的一些变量找到了静态指针。(如健康等)

经过大量的实验和数小时的研究,我终于想出了这段代码

DWORD HPValue = *(DWORD*)(*(DWORD*)0x302DD0E8 + 0x84C);  
但是,这会立即使我的应用程序崩溃,如果我删除此代码并插入DLL,一切都会正常运行。。好吧,“工作”因为它除了坐在那里之外什么也不做

我真的在寻找帮助来理解这是如何工作的,我也不想做任何坏事,比如毁掉一场比赛,只是想从中获得一些经验。这是我的DLL界面的截图,我只是想读取数据

这是一张在作弊引擎中发现的地址信息的图片,这些信息在其他计算机上也可以使用,就像我问这个问题后测试过的一样


当我说我有指针时,我的意思是我有基址,我已经循环了所有的指针来获得基址….

我想你在这里遇到的最大问题是。这意味着无法保证下次运行游戏时,您正在读取的任何数据都会在同一个位置。特别是,无论ASLR如何,都不能保证其他人提出的基准/偏移量对于您的计算机是相同的。您也可以考虑访问。指向内存的指针寿命有限。如果这些指针指向堆上的对象,那么每次运行程序时它们基本上都是随机的。指向堆栈的指针在运行的应用程序之外是无用的,即使它们不是随机的,因为它们在函数返回后立即被覆盖。你不能在代码中硬编码十六进制地址,你需要在运行时确定它们。@格雷格威尔-我在游戏重启后重新测试了这个指针,计算机重新启动,它拉了同样的信息,我不知道如何用C++来做。我想他们把这个叫做“基地址”。抱歉,我对这一切还是有点陌生,不过这是人们在制作游戏等训练器时使用的变量。暂时假设0x302DD0E8是一个有效的内存位置,其中包含数据<代码>*(DWORD*)0x302DD0E8这将0x302DD0E8强制转换为DWORD指针,然后外部*(解除引用)表示在该位置获取DWORD。然后,该位置上的任何DWORD值都会添加0x84C。我怀疑这是您想要的我假设您想要的是将0x302DD0E8添加到0x84C,然后您只需要在该位置获取DWORD值并将其存储在HPValue中。我想你想要的是
dwordhpvalue=*(DWORD*)(0x302DD0E8+0x84c)
DWORD HPValue = *(DWORD*)(*(DWORD*)0x302DD0E8 + 0x84C);