识别游戏数据中的复杂结构¶
第 4 章描述了游戏如何把数据存储在静态结构中。这些知识在你寻找简单数据时足够了,但对通过动态结构存储的数据则力不从心。这是因为动态结构可能分散在不同的内存位置,遵循长指针链,或者需要复杂算法才能真正从中提取数据。
本节探索你在视频游戏代码中会遇到的常见动态结构,以及找到它们后如何从中读取数据。首先,我会谈谈每种动态结构的底层构成。接下来,我会概述从这些结构读取数据所需的算法。(为简单起见,每个算法讨论都假设你有一个指向结构实例的指针,以及某种从内存读取的方法。)最后,我会介绍一些技巧,帮助你确定在内存中搜索的值是否真的封装在这些结构中,这样你就知道何时应用这些知识。我会专注于 C++,因为它的面向对象特性和大量使用的标准库通常是这类结构的来源。
注 其中一些结构可能因机器而异,取决于编译器、优化设置或标准库实现,但基本概念保持不变。此外,为了简洁,我会省略这些结构中无关的部分,比如自定义分配器或比较函数。工作示例代码可以在
https://www.nostarch.com/gamehacking/的第 5 章资源文件中找到。