从二进制完美重建:Borland C++ 2.0 编译器源码之谜

原创
alex 14小时前 阅读数 5 #头条

从二进制完美重建:Borland C++ 2.0 编译器源码之谜

BC++ 2.0 的历史地位与重建挑战

1991 年,当 Borland 发布 C++ 2.0 时,C 语言刚刚完成 C89 标准化,而 C++ 的第一个官方标准要等到 1998 年才出现 来源:Hackaday。那个年代的程序员拿到的是一个能编译、能调试、能链接的完整 IDE,Turbo C++ 的后继产品 Borland C++ 2.0 随即成为专业 C/C++ 开发环境中的代表作品。它的重要性在于,它把编译器、编辑器、调试器打包成一套可以日常使用的工具链,而不是需要手工调用的命令行集合。

作为商业项目,Borland 从未公开这套工具链的原始源代码 来源:Hackaday。这在当时是行业常态,公司靠卖软件赚钱,没人有义务把厨房的菜谱交给食客。于是,三十多年里,BC++ 2.0 的内部实现一直是一颗黑箱,研究者只能通过行为观察来推测它如何处理寄存器分配、如何优化表达式求值。

这次所谓重建的目标,是把二进制工具链逆推回可读的源码,而且要求用重建源码编译出的二进制与原始工具链的二进制完全一致,这个标准在逆向工程里叫 byte-perfect 来源:Hackaday。从 1991 年发布到 2026 年 11 月 Hackaday 报道,跨度约 35 年 来源:Hackaday。我见过不少声称还原了某段旧代码的工作,多数止步于"行为相似",真正逐字节一致的例子屈指可数。

重建出来的源码,最可能的用途有两个。一个是维护 DOS 时代的旧软件项目,那些代码还在运行,但编译器早已无处可买。另一个是纯粹的历史研究,想弄明白 90 年代初的编译器作者到底写了什么样的代码 来源:Hackaday。这两个用途都合理,但也都小众,所以这个新闻在 Hackaday 上只有 1 分热度 来源:HN。

逆向工程方法:Claude Code 与 Exhume 工具

完成这项工作的人叫 Abedegno。他没有把整个过程写成博客文章,而是放在一份独立的文档里,单独介绍如何从工具链二进制中提取源码 来源:Hackaday。这种安排让我有点困惑,Hackaday 的报道只提到了这份文档存在,没有给出外部链接。我试图在文末找到跳转地址,一无所获。这意味着,目前能看到的只是一份摘要,而不是方法本身。

在重建过程中,Abedegno 使用了基于 Claude Code 的 Exhume 工具作为 AI 辅助手段 来源:Hackaday。原文没有列出 Exhume 的具体命令或版本号,也没有说明 Claude Code 在哪个环节介入,是负责分析二进制结构,还是负责生成候选源码,还是两者兼有。我倾向于认为它扮演了模式识别的角色,因为从编译器的行为反推源码,本质上是一个约束求解问题,AI 在探索巨大搜索空间时确实可能帮上忙。但这只是我的猜测。

作者声称重建是 byte-perfect 的,即二进制级完全一致 来源:Hackaday。在技术圈里,"byte-perfect"是一个很强的说法,它意味着重建源码编译出的每一个字节都与原版相同。对于编译器这种代码量庞大的程序,达到这个标准极其困难。我不确定作者是如何验证这一点的,是用已知输入跑差异测试,还是逐字节比对输出文件,Hackaday 没有披露验证方案。

逆向工程一个编译器,和逆向工程一个普通应用软件,难度不在一个量级。编译器内部有词法分析、语法分析、语义分析、中间代码生成、优化器、寄存器分配、指令选择、代码生成等多个阶段,每个阶段都可能因为优化策略的不同而产生不同的输出。Abedegno 能把整个过程压缩到一个 AI 辅助工具的框架内,至少在方法论上是一个值得注意的方向。但"注意"和"验证"是两回事。

多源视角:报道与社区验证

Hackaday 的报道在措辞上留了一手。原文用的是 claimed to be a byte-perfect recreation,意思是"据称"是逐字节完美的重建 来源:Hackaday。claimed 这个词表明,这是 Abedegno 自己的声明,而不是经过独立验证的事实。我翻看整篇报道,找不到任何第三方测试结果或可复现的校验数据。

社区的反应更冷淡。对应的 Hacker News 讨论帖(id=50494481)目前有 0 条评论 来源:HN。这意味着这条消息从个人博客或文档流到 Hackaday,再由 Hackaday 发到 HN 之后,还没有人接过话头。文章末尾感谢 Stephen Walters 提供线索 来源:Hackaday,但 HN 上没有任何讨论,反映出消息传播路径是从个人到媒体再到社区的延迟。也许过几天会有懂行的人来验证,也许没有。

文中提及重建细节在 separate document 中,但未提供外部链接 来源:Hackaday。这个缺失是我最在意的地方。没有链接,外部研究者就没法检查那份文档,更没法复现 Abedegno 的过程。一个声称达到 byte-perfect 标准的工作,如果连方法文档都不公开,那么它的可信度就完全建立在作者声誉之上。

所以,目前最需要的是独立验证。重建源码能否真正编译出与原始工具链一致的二进制,尚待确认 来源:Hackaday。如果验证通过,这将是逆向工程史上的一个高光时刻,它意味着我们能把一个 35 年前的商业编译器完整地还原回人类可读的形式。如果验证失败,那这次重建的价值就要打折扣,可能只是行为相近,而非字节相同。我现在倾向于谨慎看待,因为 byte-perfect 的门槛太高,而公开证据太少。


原文:

Borland C++ 2.0 Compiler Source Reconstructed · 来源:Hacker News

作者:itfan123 值班编辑 · 发布于 2026年11月14日

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除