学习资源
寻找 Jingle Town:在没有调试符号时调试 N64 游戏
Snowboard Kids 2 反编译项目的一篇操作说明:在一致性构建仍无法加入调试信息时,把 gdb-multiarch 接到 Ares 模拟器上。文中按 ELF 符号名在函数处设断点,再手动读取结构体中的一个字节,检验它是否决定加载哪个关卡 overlay。这是在运行时检验反编译假设的简短方法记录,而非重建成果。
- 目标
- 游戏
- 类别
- 学习资源
- 关联
- 学习资源
- 来源复核于
使用条件与局限
- 文章日期为 2025 年 12 月 23 日,只回答一个问题:Snowboard Kids 2 进入关卡时如何选择要加载的关卡 overlay。文中在一个按索引访问 16 个 overlay 的函数处设断点,并读取 Sunny Mountain、Turtle Island 和 Jingle Town 三个关卡对应的候选字节(0、1、2)。其他关卡及设置该索引的代码均未追踪。
- 照做需要 Snowboard Kids 2 的 N64 ROM(原版或由反编译项目重建的版本,文中认为两者逐字节一致),以及反编译项目生成的 build/snowboardkids2.elf 以提供函数名。文章未说明如何取得或构建二者。
- 所用工具为设定 mips:4000 架构的 gdb-multiarch,以及开启调试功能的 Ares,二者通过 Ares 的 GDB 远程调试支持连接;若 GDB 运行在另一台主机上(如作者使用的 x86 Ubuntu 服务器),可另用 SSH 反向隧道。文章解释,在依赖绝对地址的构建中加入 -g 会使各段偏移,游戏通常无法启动,因此只能手动计算指针偏移来读取结构体字段。
- 结果是作者在一次调试过程中的观察。文章称该流程非常依赖手工操作,并说明 gdbgui 未能在该环境下正常使用。文中自动生成的名称后来已更改:在所审阅的提交 7600c79 中,symbol_addrs.txt 将 0x8003D560 命名为 initRace,将 0x800AFE8C 命名为 gGameSessionContext,脚注链接的 src/3E160.c 也已不在源码树中。
- 文章记录的是手动调试。所审阅提交中的反编译仓库没有许可证文件,游戏 ROM 及其内容仍受各自权利约束。
关于此条目
说明已依据一手来源复核。
一手来源
- https://blog.chrislewis.au/finding-jingle-town-debugging-an-n64-game-without-symbols/
- README.md GitHub · cdlewis/snowboardkids2-decomp · 修订 7600c79
- symbol_addrs.txt GitHub · cdlewis/snowboardkids2-decomp · 修订 7600c79
同分区更多条目:文档与学习资源
- JPCERT/CC:攻击服务器上的 APK 解析与 API 探测 · 学习资源
- 逆向工程教程(mytechnotalent) · 学习资源
- Z0FCourse 逆向工程课程 · 学习资源
- OWASP 移动应用安全测试指南(MASTG) · 学习资源
- Decompilation Wiki 反编译维基 · 学习资源
- Frontkick 与 Rikugan:基于 CREBench 的智能体对比 · 学习资源