13-拆解程序
07 拆解程序
起点:程序是游戏的「黑盒」
其他拆解(玩法/结构/关卡/手感/美术/资源)面对的是可观察的产物——规则、画面、手感都能直接感受。
但程序是黑盒:
1 | 你看到的:画面、操作反馈 |
拆解程序,就是面对一个只有外部行为的黑盒,恢复它的内部结构。
一、程序拆解的本质是逆向
游戏工程的完整地图里有五类工程:
1 | 软件工程 创造世界(从零写出游戏) |
其中逆向工程就是程序拆解:
1 | 正向(写游戏): 设计 → 代码 → 可执行文件 |
游戏逆向工程 = 从已经存在的游戏程序里,反推出它的结构、数据、规则。
二、程序拆解的四层递进
游戏分析工程是四层递进(21 步):
1 | 第一层:外部观察 |
每一层回答的问题不同:
1 | 外部观察 它在做什么 |
三、程序拆解的核心动作
1. 画软件地图
从整体上先定位:
1 | 模块结构(主程序 / 子程序 / 插件) |
2. 记录关系而不是地址
逆向信息保存的核心原则:
1 | 记录「访问路径」不记录「偏移」 |
因为地址会变,关系不变。
3. 功能树
把一个程序的功能拆成树:
1 | 游戏程序 |
再往下每一层继续拆,直到每个功能都能定位到:
1 | 功能 → 对象 → 数据 → 函数 |
形成「功能到对象数据函数」的知识网络。
4. 数据视角与功能视角
同一个程序有两种拆法:
1 | 数据视角:内存里有哪些对象、结构体、字段 |
两者互补:
1 | 数据视角回答「有什么」 |
四、识别数据结构的技巧
从内存里识别结构体,有几套反复出现的规律:
1 | 难以搜索的数据 → 从对象和引用入手(先找对象再找数据) |
核心判断:
1 | 数据变化 → 快照对比 → 结构体展开 |
观察数据怎么变,比猜测数据是什么更可靠。
五、程序拆解与游戏的关系
游戏程序比普通程序更难拆,因为:
1 | 游戏有主循环 所有逻辑在循环里反复执行 |
所以拆游戏程序要特别关注:
1 | 主循环的每一帧做了什么 |
六、与其他线的关系
1 | 拆解结构 结构是设计视角,程序是运行视角 |
程序线是所有拆解里最「硬」的一条——其他拆解靠观察和推理,程序拆解要靠工具、内存、反汇编,是逆向工程论的直接落地。
小结
1 | 程序 = 黑盒 |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
