assembly - 如何找到具有负偏移量的基址结构地址

标签 assembly reverse-engineering cheat-engine

我正在使用 CE 对一款旧游戏进行逆向工程。 我找到了修改单位HP的代码,但我找不到基址,因为偏移量是负数。

OPCODE: "mov [esi-282],ax"[1]

问题是我什至不知道这是如何工作的,这对我来说听起来很愚蠢,为什么编译器/开发人员无论如何都会这样做?它是一种堆栈临时指针吗?有什么办法可以找到吗? (我很确定有办法) 这很令人沮丧,因为我已经找到了诸如 ID、HP 之类的偏移量,但是基础...我通常没有问题,偏移量是正值。

我认为底座应该是[esi-STRUCTURE_SIZE] 最后一项将是 [esi]

也许我完全错了。

谢谢:)

最佳答案

当使用多重继承时,负偏移量通常用于从子类指针访问基类成员。编译器将知道完整的布局,而不是首先向上转换指针,而是直接访问基类中的成员。

从生成的代码中不可能知道类实例在内存中的起始位置。然而,通常应该可以通过跟踪对否定寻址成员的访问来找到基指针。毕竟,程序员可能创建了层次结构来访问基本成员,而不管它们到底是什么派生类型。

关于assembly - 如何找到具有负偏移量的基址结构地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357547/

相关文章:

objective-c - otool for armv7 的错误方法实现地址?

delphi - 删除用纯汇编编写的函数的序言

assembly - 给定其在运行进程中的地址,在可执行文件中查找指令?

memory - 在游戏中寻找特定的内存位置?

c - 线程入口和线程启动之间的确切区别是什么?

java - Java 中的代码注入(inject)/程序集内联?

android - .apk 没有正式的格式规范吗?

java - 用于 Eclipse 或 Maven 的 UML 逆向工程工具

c# - 使用 C# Cheat Engine 中的指针

c++ - 如何获取进程中使用的 .DLL 的(物理)基地址?