与指针和地址混淆[作弊引擎]
Confused With Pointers And Adresses [Cheat Engine]
我在理解地址和指针的含义时遇到了问题。我得到了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++的角度理解指针和面向对象编程将使反向工程指针变得更容易,因此您可能想复习一下,并进行一些实践应用。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- 从作弊引擎到C++的指针
- 如何在没有作弊引擎的情况下从其他应用程序获取指针地址?
- 虚幻引擎 4.18.0,VS2017,不允许指向不完整类类型的错误指针
- 与指针和地址混淆[作弊引擎]
- 通过函数指针在游戏引擎数学库中使用SIMD ~一个好主意
- 如何创建指针虚幻引擎4
- C++、作弊引擎/OllyDBG从多级指针中查找基础"static"地址