首先找到您要查找的地址。然后循环这个:
- 找到基数(记录的开头)。
- 剖析围绕此的内存以识别数组或链表。
- 在内存中搜索指向该基的指针。
示例:
扫描查找地址的参数30000032
。
找出这条记录的基础是30000000
。
检查内存 - 没什么特别的。
在 处找到指向基数的指针20000004
。
找出记录的基础是20000000
。
检查内存 - 仍然没有......
在 处找到指向基数的指针10000008
。
找出基数是10000000
。
检查内存 - 所有指向我要查找的对象的指针彼此相距 12 个字节。(显然这是某种集合。)
最后一次内存扫描指针以确保我在0000040
.
找到指向该集合的指针,紧接着:集合中对象的计数。
重新启动游戏/计算机几次以找到指向该地址的一致指针。
用啤酒奖励自己的出色工作。
如何找到基数:我喜欢使用“指针扫描”,并检查最后一个偏移量。最常见的最小的通常是正确的。
有时,我试图在分配的内存的开头找到一条记录,在这种情况下,我确定某些内容是基本的。
另一个技巧是在内存中一个接一个地找到两个,确定它们的“最大大小”,这意味着基数不能超过内存中的这个数字。
如何识别集合:它们中的大多数都是非常有组织的,具有特定的偏移量,或者具有指向相同类型对象的指针。
就像如果你有:
Pointer to Player 1 data,
4 Bytes
4 Bytes
Pointer to Player 2 data,
4 Bytes
4 Bytes
Pointer to Player 3 data
它应该敲响警钟。
请记住,这种对齐可能会在源中随机发生,因此请尝试搜索:Player 3 数据、Player 3 数据 +/- 4、Player 3 数据 +/- 8。
无论如何,如果你发现这样的东西,你很可能真的很接近。
这对我有用,希望对你们也有用。