首页/新闻资讯/正文详情

反编译是怎么做的:Tenkaichi3Decomp字节级还原PS2游戏的完整教程

发布时间:2026/11/6 7:43:31 来源:云帆数科 栏目:资讯中心
反编译是怎么做的:Tenkaichi3Decomp字节级还原PS2游戏的完整教程
【免费下载链接】Tenkaichi3DecompPC port of Dragon Ball Z: Budokai Tenkaichi 3, built on the BT3-Decompiled project.项目地址https://gitcode.com/gh_mirrors/te/Tenkaichi3Decomp点击查看免费下载Tenkaichi3Decomp是 PS2 名作《龙珠Z电光石火3》Dragon Ball Z: Budokai Tenkaichi 3SLUS-21678的 PC 原生移植项目它建立在BT3-Decompiled反编译工程之上不是模拟器而是把游戏原本的MIPS 汇编逐函数还原成 C 代码再用当年的Sony ee-gcc 2.96编译器重新编译直到产出的二进制与原版字节完全一致最后再垫上全新的 PC 渲染、声音与输入层。本文带你走一遍这套反编译 → 字节级验证 → PC 移植的完整流程。一、先搞懂反编译和重编译不是一回事 很多人以为反编译就是把机器码翻译回 C 语言。实际上 Tenkaichi3Decomp 追求的目标更苛刻——匹配反编译matching decompilation❌ 普通反编译写出逻辑上等价的 C能跑就行✅ 匹配反编译写出的 C 必须编译出和原版一模一样的机器码每一个字节、每一条指令都不能差。为什么要这么较真因为 PS2 的浮点运算、随机数序列、30 帧/秒的帧逻辑都高度依赖执行时序逻辑等价的代码在联网对战、录像回放时会逐渐跑偏。字节级一致才能保证移植版与主机版行为完全相同。二、项目结构代码从哪来到哪去目录作用src/、include/游戏本体代码来自反编译工程PC 改动写在#ifdef PORT里port/src/PC 侧新代码Vulkan/OpenGL 渲染器、内存卡、电影播放、设置窗口port/tools/构建工具64 位指针重写、打包、光盘数据提取port/data/游戏内置数据表的形状只有标签和大小数值启动时从你的光盘读取config/symbols/符号表每个函数/全局变量的名字和地址docs/反编译发现的游戏机制笔记战斗、AI、HUD、存档等⚠️ 注意仓库里不包含任何游戏数据需要你自己准备的 USA 版光盘镜像.iso安装时程序会校验镜像是未修改的 SLUS-21678 版本。三、MIPS 汇编反编译的完整工作流 整个流程记录在 docs/decomp_guide.md可以概括为一个循环步骤 1读汇编用 splat 反汇编工具把可执行文件拆成一堆.s文件。每个函数长这样nonmatching FunctionName, 0xSIZE glabel FunctionName ...MIPS 指令... endlabel FunctionName步骤 2手写 C按地址顺序一个 C 文件覆盖一段连续的地址范围跳过不行、乱序也不行。类型来自 include/types.hs8 u8 s16 u16 s32 u32 f32等。步骤 3记录符号名每取一个名字就写进 config/symbols/ 下的符号文件格式固定Name 0x00123456; // type:func gGlobal 0x002FF080; // size:0x8猜测的名字要标// guess且全项目不许重名。步骤 4fdiff 逐函数比对运行python3 scripts/fdiff.py src/area/module.c它会用ee-gcc 2.96按原版参数-O2 -fno-strict-aliasing游戏代码-G8、CRI 库-G0编译你的 C 文件把每个函数与原版二进制并排逐条指令比对输出OK表示匹配重定位字段会被掩码屏蔽所以链接前也能检查。步骤 5迭代到全部 OK再链接进大工程.venv/bin/python configure.py ninja cmp build/SLUS_216.78.rom disc/SLUS_216.78.rom # 必须完全静默 cmp build/DBZP.BIN disc/BIN/DBZP.BIN python3 scripts/progress.py # 统计反编译百分比只有ninja成功 两个镜像cmp静默才算真正通过这就是项目里常说的gate。四、ee-gcc 2.96为什么必须用当年那台编译器 ⚙️这是字节级反编译最玄学也最关键的一环。项目做过一轮完整的工具链排查见 docs/decomp_guide.md 的 Toolchain check 一节结论非常干脆游戏用的编译器是gcc version 2.96-ee-001003-1PS2 EE 处理器专用分支其他所有公开 ee-gcc 版本2.9、2.95、3.2最多只能保住 16% 的函数匹配换 118 组编译参数、361 种组合没有任何一组能救活卡住的函数反而都会弄坏已匹配的函数去掉-fno-strict-aliasing会弄坏 1060 个函数加-g会弄坏 84 个——所以原版就是无调试信息编译的。这意味着你手写的 C 必须迎合 25 年前编译器的脾气。docs/decomp_guide.md 里沉淀了几十条血泪经验举几个汇编现象对应的 C 写法lui/addiu而不是gp_rel小全局变量≤8 字节必须声明成完整类型extern s32 tbl[]不行beq 1 / slti 2 / beq 2阶梯那是一个switch且显式写了case 0: break;sltvssltu、divvsdivu有符号/无符号写反了多出一条move v1,s1原版重复计算了一个表达式别帮编译器优化分支延迟槽里凭空多一条指令看include/gcc_prelude.inc的预序列规则Sony 汇编器会把分支前一条指令塞进延迟槽甚至连long是 64 位、浮点字面量3.14159265f一位都不能少fdiff 看不见.lit4常量池必须人工对字节这些细节都有记录。五、fdiff 逐函数比对反编译的单元测试 ✅scripts/fdiff.py 是整个工程的质量门禁思路很巧妙掩码屏蔽重定位位跳转目标、%hi/%lo/%gp_rel立即数这些链接时才知道的字段被按R_MIPS_26 / HI16 / LO16 / GPREL16掩掉因此函数没链接也能提前验证函数级粒度一个文件 100 个函数99 个OK、1 个卡住能精确知道差在哪几条指令原版在左、你的在右并排打印盲区靠真镜像补fdiff 看不见数据初值比如一张颜色表写错一个字节所以最终裁判是链接后build/与disc/两个 ROM 的cmp全量比对——历史上 11 色调色板里 5 个颜色写错的 bug 就是这样被揪出来的。对怎么写都凑不齐寄存器的疑难函数项目还配了两件重武器差分行为测试build/scratch_difftest/把原版字节和你的 C 在同一个随机内存上各跑 3000~4000 组种子比对返回值、每一条外发调用的参数、写出的每个字节——59 个未匹配函数全部测试只抓到 1 个真实行为差异而且恰好是原版的复制粘贴 bug已记录在 docs/known_bugs.md语句排列器scripts/permute.py对只差寄存器分配的函数自动搜索语句顺序三轮共解出 30 个函数。实在匹配不上的函数会写成INCLUDE_ASM(...)保留原版汇编并把最佳 C 尝试留在#if 0里加注释绝不偷偷改对。六、链接最后一公里的对齐地狱 函数全 OK 之后链接阶段还有独立的一整套坑因为数据段的布局也是原版的字节每个 C 文件在 config/SLUS_216.78.yaml 里要登记自己的c/.rodata/.lit4/.sdata子段起点地址原版把.rodata补齐到 16 字节、现代编译器只补 8 字节——差 8 字节时就要手工提前 8 字节放下一段汇编数据块跳转表按对象起点做 16 字节对齐有时得把 C 文件向前扩展、用INCLUDE_ASM把前面的函数拉进来才能对齐src/battle/btl_seq.c 就是例子两个可执行文件要一起管主程序SLUS_216.78约 1.8 MB 代码 菜单覆盖层DBZP.BIN737 个函数加载在 0x334C00开发者内部叫它PROGRESS。进度统计由 scripts/progress.py 给出。截至最新提交主程序 94.96%、覆盖层 99.24% 的代码由 C 编译产出两个镜像字节一致约 7270 个函数全部匹配仅剩 45 个INCLUDE_ASM。七、从反编译到 PC 移植 ️字节级一致之后移植就变成了一层干净的工程渲染port/src/gs/里的 Vulkan 渲染器重画 PS2 的画面描边、辉光、深度着色、远景模糊都可开关没有 Vulkan 的机器自动落到 OpenGL 3.3数学层游戏 30 帧的战斗模拟用 PS2 VU0 数学PC 上由softfloat_ps2.c逐位复现保证帧确定性联网port/matchmaking/是一个完整的 Cloudflare Worker 匹配服务房间码 TURN 中继回滚帧数由房主设定数据仓库只带数据表的空壳port/data/启动时从你自己的光盘镜像里取真实数值。游戏机制的发现全部沉淀在 docs/systems/战斗帧结构、格斗家对象、AI 对手、HUD、存档块 等每条结论都标注Verified编译出原版字节或Inferred从反汇编推断。八、新手入门路线如何动手参与 想上手贡献建议按这个顺序读README.md —— 项目总览、安装与源码构建python3 install.py --iso 你的镜像docs/decomp_guide.md —— 反编译一个模块的完整方法论核心文档docs/status.md —— 当前进度交接笔记看最新状态怎么验证docs/agent_rules.md —— 并行协作的规矩参考已完成的范例src/sys/heap.c include/sys/heap.h。环境上你需要tools/ee-gcc2.96/Sony 编译器、tools/binutils/mips-ps2-decompals-*MIPS 汇编器/反汇编器、Python splat ninja以及一份合法获得的 SLUS-21678 光盘镜像。日常验证三板斧.venv/bin/python configure.py ninja cmp build/SLUS_216.78.rom disc/SLUS_216.78.rom python3 scripts/fdiff.py src/area/module.c九、为什么字节级反编译值得做确定性浮点、随机数、帧时序逐位一致联网对战和回放才不会跑偏可修改性C 代码可以随便加功能本项目就加了在线对战、新渲染器、自定义关卡/音乐改完还能一眼看出影响可移植性字节一致是移植的地基——同一份游戏逻辑跑在 Linux、Windows 甚至 Apple Silicon实验性上研究价值反编译过程顺带发现了原版随机数只刷新 396/624 状态字的怪实现、碰撞检测里的死代码、以及多个修不得的原版 bugdocs/known_bugs.md。小结Tenkaichi3Decomp 展示的是一条可复制的路——原版编译器 符号表 逐函数字节比对 全量镜像验证把一个 PS2 游戏 7000 多个函数逐一请回 C 语言世界再在这个完全透明的地基上构建 PC 移植。如果你对 MIPS 汇编、编译器行为或游戏逆向感兴趣docs/decomp_guide.md 里那几十条踩坑笔记本身就是最好的教材。许可说明port/下移植代码为 AGPL-3.0早期为 MITsrc/游戏代码版权归原作权利方所有项目不包含游戏资源需自备光盘镜像。赞分享【免费下载链接】Tenkaichi3DecompPC port of Dragon Ball Z: Budokai Tenkaichi 3, built on the BT3-Decompiled project.项目地址https://gitcode.com/gh_mirrors/te/Tenkaichi3Decomp点击查看免费下载相关推荐LuaDec51反编译实战从字节码到源代码的完整还原方案LuaDec51反编译实战从字节码到源代码的完整还原方案 LuaDec51是一款专注于Lua 5.1版本的字节码反编译工具能够将编译后的Lua字节码.lu开发工具LuaJIT反编译神器LJD从字节码到源码的完整还原指南LuaJIT反编译神器LJD从字节码到源码的完整还原指南 你是否曾经面对一个编译后的LuaJIT字节码文件却苦于无法理解其内部逻辑或者需要分析某个Lua脚bbhost反编译实践200个游戏函数被重写为源码位精确验证体系是怎么做到的bbhost反编译实践200个游戏函数被重写为源码位精确验证体系是怎么做到的 bbhost 是让《血源诅咒》Bloodborne在 PC 上运行的开源移上一篇din_mmoe基准评测指南推荐模型性能评估方法与结果解读下一篇刚刚AI 交易 Agent 对苹果一战赚了 26.6%开源圈彻底坐不住创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

从仿制到定制:修改CreditSesameRingView配色、刻度与信用等级打造专属圆环进度条
从仿制到定制:修改CreditSesameRingView配色、刻度与信用等级打造专属圆环进度条

【免费下载链接】CreditSesameRingView Imitation of Ali credit sesame new old ring view.http://www.jianshu.com/p/8486a5baa708 项目地址: https://gitcode.com/gh_mirrors/cr/CreditSesameRingView 点击查看 免费下载 CreditSesameRingView 是一个免费的开源… · 2026/11/6 7:43:31

React-Slingshot 全栈集成教程:6 步把 React 前端和 Node.js 后端 API 打通
React-Slingshot 全栈集成教程:6 步把 React 前端和 Node.js 后端 API 打通

React-Slingshot 全栈集成教程:6 步把 React 前端和 Node.js 后端 API 打通 【免费下载链接】react-slingshot React Redux starter kit / boilerplate with Babel, hot reloading, testing, linting and a working example app built in 项目地址: https://gitc… · 2026/11/6 7:43:31

TranslucentTB 任务栏透明美化,3 分钟上手
TranslucentTB 任务栏透明美化,3 分钟上手

TranslucentTB 任务栏透明美化,3 分钟上手 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 一张精心挑选的壁纸,底… · 2026/11/6 7:43:31

电工证拍照技巧图片保姆级教程:别怕考不过白交培训费
电工证拍照技巧图片保姆级教程:别怕考不过白交培训费

电工证拍照技巧图片保姆级教程:别怕考不过白交培训费 怕考不过白交培训费?别急,先看懂这些拍照技巧,再考再报名都不晚。今天咱们不聊机构,就讲干货—— 电工证拍照技巧图片… · 2026/11/6 20:56:34

电工证作弊视频全流程办理指南:学历不高怕报不上名?官方报名入口全解析
电工证作弊视频全流程办理指南:学历不高怕报不上名?官方报名入口全解析

电工证作弊视频全流程办理指南:学历不高怕报不上名?官方报名入口全解析 你是不是也担心学历不高,连电工证都报不了?别急,今天咱们就来聊聊这个【电工证作弊视频】的话题,顺便告诉你怎么在【官方报名入口】上顺利报考,别再被那些“捷径”忽悠了。… · 2026/11/6 20:56:34

电工证必背代码网上查询全攻略 专为学历不高怕报不上名的你
电工证必背代码网上查询全攻略 专为学历不高怕报不上名的你

电工证必背代码网上查询全攻略 专为学历不高怕报不上名的你 你是不是还在为电工证报考发愁?学历不高怕报不上名?别急,今天我就从 商丘房建工程从业者 角度,一步步告诉你怎么搞定 电工证必背代码 ,以及如何通过 网上查询… · 2026/11/6 20:56:34

高压电工证几个月考试良心建议,别再被中介忽悠了
高压电工证几个月考试良心建议,别再被中介忽悠了

高压电工证几个月考试良心建议,别再被中介忽悠了 你是不是也和我一样,听说了高压电工证几个月考试这个事,心里一万个问号?到底怎么报名?什么时候能考?怕被中介坑?别慌,今天我来跟你唠清楚,从报考到考试,一整套流程说给你听,绝对 良心建议… · 2026/11/6 20:56:34

在哈尔滨哪能考电工证证怎么转异地
在哈尔滨哪能考电工证证怎么转异地

哈尔滨考电工证怎么转异地?外省证书含金量还在吗? 之前考的证在外省能不能转过来?这是很多在外地打工、又想在哈尔滨长期发展的人最关心的问题。尤其是在哈尔滨这类北方工业城市,电工证的 含金量… · 2026/11/6 20:56:34

高压电工证几个月考试网上查询方法全解析
高压电工证几个月考试网上查询方法全解析

高压电工证几个月考试网上查询方法全解析 你现在正在为找工作发愁,手里缺的就是一个高压电工证,别人都有证,你还在等?高压电工证几个月考试,这个问题直接关系到你能不能顺利上岗,甚至影响你未来的薪资和晋升通道。别再等了,现在就来搞清楚高压电工证的… · 2026/11/6 20:55:33

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码