5

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

操作码:

问题是我什至不知道它是如何工作的,这对我来说听起来很傻,为什么编译器/开发者会这样做呢?它是一种堆栈临时指针吗?有没有办法找到它?(我很确定有办法)这很令人沮丧,因为我找到了 ID、HP 和其他东西的偏移量,但是基础......我通常没有问题,偏移量是正的。

我认为基础将是一些东西[esi-STRUCTURE_SIZE] ,最后一个项目将是[esi]

或者,也许我完全错了。

谢谢 :)

4

1 回答 1

3

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

从生成的代码中,不可能知道类实例在内存中的起始位置。然而,通常应该可以通过跟踪对负地址成员的访问来找到基指针。毕竟,程序员可能创建了层次结构来访问基成员,而与它们的确切派生类型无关。

于 2016-02-20T22:47:45.017 回答