与指针和地址混淆[作弊引擎]

Confused With Pointers And Adresses [Cheat Engine]

本文关键字:引擎 指针 地址      更新时间:2023-10-16

我在理解地址和指针的含义时遇到了问题。我得到了client.dll的地址,在本例中是"ac_client.exe",因为我正在处理attack cube。我把这个地址加到基地址上,得到本地播放器指针,它是509b74。示例图像在这个指针中,我使用localplayer并添加F8的偏移量,这将指向健康状况。正如你所看到的,上面写着0x509b74->000E1B188。。。。。"000E1B188"是从哪里来的?我不明白?则执行000E1B188+f8=00E1B280会发生什么?我不明白?!

为了澄清0x509b74是一个硬编码地址,它对Assault Cube来说是可以的,因为没有启用地址空间层或随机化,并且.exe总是加载到0x400000中。您还可以动态获取ac_client.exe模块的地址,然后使用ToolHelp32Snapshot 添加0x109B74的相对偏移量

在本练习中,指针是一个变量,它只包含一个表示地址的数字。当你编程和定义指针时,你必须定义指针将指向的变量的类型。这只是为了编译器的目的,这样它就可以创建代码,用该数据类型的正确指令和强类型编译器错误检查正确访问指针末尾的变量。

0x509b74恰好是指向动态本地玩家对象的指针。换句话说,动态播放器对象指针位于0x509b74。它指向0x00E1B188,它是动态分配的本地玩家对象的地址。从0x509b74到0x00E1B188被称为去引用,它只是读取指针中包含的地址。

一旦指针被取消引用,您将看到地址0x00E1B188,它可以被称为本地玩家对象的"基本地址"。还要考虑这是在播放器对象的偏移0x0处。当您向其添加0xF8时,您现在看到的是0x0E1B280,即播放器类中的运行状况变量的地址,在这一点上,这只是一个简单的添加。

一旦你学会了它,它实际上很简单。它在代码中基本上看起来类似:

struct player
{
int ammo;
int health;
}
player* localPlayerPtr = new player();

在本例中,弹药偏移量为0x0,生命值偏移量为0x4,假设int为4字节。假设localPlayerPtr位于0x509b74,指向位于0x00E1B188的新玩家对象。偏移0x0是弹药。当您添加偏移量0x4时,您会得到0x00E1B18C,这是运行状况地址。

从C++的角度理解指针和面向对象编程将使反向工程指针变得更容易,因此您可能想复习一下,并进行一些实践应用。