【发布时间】:2017-06-03 14:48:36
【问题描述】:
我什至没有一个问题,我认为这是某种确认,我正确理解了这个主题。
我正在做一些逆向工程研究,这就是我所拥有的。
假设我们有结构/类,如下所示:
struct {
char str[n]
int x
float a
}
我们在我们正在查看的进程的内存中有一个这些结构的数组。
所以,我所拥有的是指向结构指针数组的指针。
如果我错了,现在请你纠正我。要读取这个数组的第一个元素的 x 值(实际结构,而不是指针),我必须按照以下步骤操作:
- 读取指针指向的值(4字节)。
- 在没有任何偏移的情况下读取先前读取的值指向的值,也是 4 个字节(这将引导我到结构开始的地址)
- 现在我必须添加偏移量,它等于 n。并从第 2 步的地址中读取值(step2result+n+1)。
我说的对吗?我会得到第一个结构包含的实际 X 吗?要从第二个获取 X 值,我只需在 step2 中添加偏移量(+4 个字节)?
我认为我这样做是正确的,但我实际上无法从指针访问结构。我会说,指向数组的指针是 100% 正确的。
感谢阅读,期待答案。如果您需要更多信息,请询问。
附言不会为了教育目的而破解任何东西或任何东西
补充:
好的,我试图简化它只会让解释和理解变得更加困难。现在我要尝试修复它。
一种结构描述了游戏中的 NPC 参数。整个结构的大小为 0x1200。前 16 个字节只是 ID 信息,然后在这个信息变成 64 个字节的字符串之后,就是名称。然后去坐标 X/Y/Z。这些之后的一切都无关紧要。
它并不难找到,这是它的截图:
/
所以我可以通过在该结构开始的地址上添加或减去 0x1200 来找到其他结构。
我搜索了结构开始的地址并找到了指向该地址的指针。
然后我扫描了对找到的指针的访问并得到了类似的东西:
mov [eax+edx*4+00320], ecx
然后我搜索 eax 值并找到指向 eax 的指针
这就是为什么我认为这是指针数组。
希望我只是更具体地解释了这一点。
【问题讨论】:
-
一个结构数组就是一个接一个地打包的结构。您比所需的间接级别多一级。
标签: c++ pointers assembly reverse-engineering cheat-engine