我正在使用 CE 对一款旧游戏进行逆向工程。 我找到了修改单位HP的代码,但我找不到基址,因为偏移量是负数。
问题是我什至不知道这是如何工作的,这对我来说听起来很愚蠢,为什么编译器/开发人员无论如何都会这样做?它是一种堆栈临时指针吗?有什么办法可以找到吗? (我很确定有办法) 这很令人沮丧,因为我已经找到了诸如 ID、HP 之类的偏移量,但是基础...我通常没有问题,偏移量是正值。
我认为底座应该是[esi-STRUCTURE_SIZE]
最后一项将是 [esi]
也许我完全错了。
谢谢:)
最佳答案
当使用多重继承时,负偏移量通常用于从子类指针访问基类成员。编译器将知道完整的布局,而不是首先向上转换指针,而是直接访问基类中的成员。
从生成的代码中不可能知道类实例在内存中的起始位置。然而,通常应该可以通过跟踪对否定寻址成员的访问来找到基指针。毕竟,程序员可能创建了层次结构来访问基本成员,而不管它们到底是什么派生类型。
关于assembly - 如何找到具有负偏移量的基址结构地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357547/