在84天内逆向工程任天堂64游戏
我很高兴地宣布,原版滑雪少年已经100%逆向工程完成!这意味着所有功能都有匹配的C语言实现,编译后可以产生与原始游戏相同的机器代码。这显然不是一个人的努力。我特别感谢inspectredc、Bl00D4NGEL和queueRAM对项目的重大贡献。没有任何人工智能能够替代他们。我还想感谢iFuzzle、JamesBLewis和douglasjv为这个事业借出的代币。我的希望是,完整的逆向工程将对滑雪少年社区有用。尤其是速度跑者们一直专注于第一款游戏。工作的源代码可以帮助阐明外部观察到的现象,例如CPU路径和影响玩家速度的确切因素。对源代码的全面理解也将对未来的静态重新编译和更雄心勃勃的修改工作有用。项目完成的速度也值得注意。滑雪少年只用了84天就完成了逆向工程,而滑雪少年2则用了596天,时间大约是1/7。每周的滑雪少年逆向工程进度。是什么解释了这个差异?好吧,已经是2026年了,所以答案至少部分与人工智能有关。但将差异完全归因于大型语言模型是一种极大的过于简单化的说法。有什么不同?显而易见,我并不是从零开始。到这个时候,我已经在一个类似的项目上花费了近两年,速度比我开始时快得多。这种优势很难量化,并且部分被新的挑战抵消,例如使用不同的编译器。总的来说,大约4.8%的匹配提交涉及专家干预。我已经一次性感谢过这些了不起的人,但值得再次提及。没有反向工程社区的重大帮助,这个项目是不可能实现的,特别是inspectredc、queueRAM和Bl00D4NGEL。困难通常不是来自于尝试理解一个函数的作用,而是如何在C语言中表达该逻辑,以及生成的代码是如何编译的。滑雪少年是使用IDO 5.3编译的,而滑雪少年2则使用GCC 2.7.2编译器。大多数程序员对GCC都比较熟悉。它是一种广泛使用的开源编译器,至今仍在积极开发中。另一方面,IDO是SGI开发的一种专有编译器,其故事与任天堂64密切交织。它的源代码不可获取,原始开发环境与过时的SGI硬件和软件相关。为了在今天使用和理解它,反向工程社区不得不逆向工程并反编译编译器工具链的部分内容,并静态重新编译IDO 5.3和7.1套件以在现代硬件上运行。这段闭合的历史使得IDO的推理比诸如GCC这样的开放编译器更困难。IDO在几个不同的阶段之间分割优化和代码生成,在此过程中相当积极地转换代码。对C语言的微小更改可能会在这些阶段间产生涟漪,并产生完全不同的寄存器分配。社区在理解IDO及其特性方面取得了重大进展,但这仍然更像是一门艺术而不是科学。我和大型语言模型在重现其输出方面并不是特别擅长。对我和代理人来说,通常的工作流是弄清楚一个函数的作用,然后编写C语言以近似该目的。从这里开始,通过排列组合的帮助可以捕捉到任何剩余的差异。但在所有情况下,你都无法通过排列自己来得到匹配,特别是当基础结构错误时。IDO的行为使得这个工作流变得不可预测。拥有正确专业知识和直觉的有动力的团队能够匹配甚至超过滑雪少年逆向工程的进度。Pilotwings 64的逆向工程仅用了74天。Pilotwings 64比滑雪少年功能少了16%,但整体编译代码更多,所以这也不是一个清晰的比较。Pilotwings 64是一款迷人的飞行模拟器,是任天堂64的发售标题,至今仍然是一个文化经典。滑雪少年也比续集小,包含2145个函数,而滑雪少年2则包含2995个函数。函数数量是一个粗略的困难度衡量标准,但确实有更少的函数需要逆向工程。代理人的帮助在哪里?我在其他地方已经写过使用代理反向工程函数的事情。这个项目中使用的基本相同的过程,所以我将重点关注变化。与之前的项目不同,这个项目开始时就获得了前沿模型和一个强大的代理人框架。我很想看看代理人在项目早期阶段的表现。一个他们表现良好的领域是匹配标准库代码。理论上,这是一块最明显的
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡