我使用CE对旧游戏进行逆向工程。 我找到了修改单元HP的代码,但我找不到基址,因为偏移是负的。
问题是我甚至不知道它是如何工作的,这对我来说听起来很愚蠢,为什么编译器/ dev会这样做呢?它是一种堆栈临时指针吗?有没有办法找到它? (我很确定有办法) 令人沮丧的是因为我发现像ID,HP和其他东西的偏移量,但基数......我通常没有问题,偏移是积极的。
我认为基地是[esi-STRUCTURE_SIZE]
的基础
最后一项是[esi]
或许我完全错了。
谢谢:)
答案 0 :(得分:3)
当使用多重继承时,负偏移通常用于从子类指针访问基类成员。编译器将知道完整的布局,而不是首先向上转换指针,直接从基类访问成员。
从生成的代码中,无法知道类实例在内存中的起始位置。但是,通常应该可以通过跟踪对负面寻址成员的访问来找到基指针。毕竟程序员可能创建了层次结构来访问基本成员,而不管它们的确切派生类型。