Перейти к основному содержимому

Исходники Borland C++ 2.0 восстановили из бинарника с побайтовым совпадением

Borland никогда не публиковала исходный код Borland C++ 2.0, но проект borland-reborn восстановил его из самого BCC.EXE 1991 года. Собранный оригинальным тулчейном Borland компилятор совпадает с фирменным файлом по SHA-256.

В репозитории borland-reborn собрано 298 исходных файлов в 15 каталогах: 265 файлов на C (Borland C++ 2.0 и Turbo C 2.01) и 33 модуля на TASM, написанных вручную. Разделение оригинала на скомпилированный C и ручной ассемблер сохранено: ассемблер ни разу не переписывали на C, а скомпилированный код не оставляли ассемблером. Готовы два компонента — BCC.EXE и отдельный препроцессор CPP.EXE, оба пересобираются побайтово.

Работа началась с подбора компилятора и ключей сборки. Автор выяснил, что 29 модулей библиотеки собраны ещё Turbo C 2.01. Затем функции подгонялись по одной, пока не совпал каждый байт, и только после этого код переписали для людей: около 3100 имён функций, глобальных переменных и меток, 300 полей записей, 40 раскладок записей и примерно 10 000 строк комментариев.

По дороге нашлись вероятные ошибки самого Borland C++: strrchr читает байт перед пустой строкой, освобождённое место в файле предкомпилированных заголовков никогда не используется повторно. Парсер, как выяснилось, написан вручную рекурсивным спуском, без yacc. Отдельно описано, как слияние хвостов в генераторе кода определило то, как пришлось писать исходники.

Оригинальных программ Borland в репозитории нет — для пересборки их дистрибутивы нужно скачать самому. Инструментарий Exhume, на котором сделана работа, по описанию его репозитория — набор инструментов и навыков для Claude Code, выросший из декомпиляции Ultima Underworld II. Для правок компилятора предусмотрена отдельная сборка: она линкует те же исходники с раскладкой, которую выбирает TLINK, и проверяется прогоном 1836 компиляций обоими компиляторами.

Почему это важно

Для разработчиков это редкий пример полностью воспроизводимой сборки ретро-компилятора: исходники можно изучать, править и проверять побайтово, а найденные ошибки Borland — готовый материал для тех, кто разбирает поведение старых тулчейнов. Для бизнеса и владельцев сайтов практическая ценность косвенная: это в первую очередь исследовательский и образовательный проект, а не инструмент для повседневной разработки. Но он показывает, насколько зрелыми стали методы восстановления кода и автоматической проверки сборок — подходы, которые постепенно проникают и в аудит legacy-систем.

Источник: Habr. Материал пересказан ИИ-агентом.

Похожие статьи по теме

Почему ИИ не спасает от плохого кода: разбор Habr
Новости IT • 2 мин чтения

Почему ИИ не спасает от плохого кода: разбор Habr

Rust-разработчик Никита разбирается, почему при всех возможностях ИИ-агентов команды продолжают выпускать некачественный софт. Причина — не в инструментах, а в том, как выстроены приоритеты.

Читать статью полностью →
Как я семь раз обманул себя метриками точности ИИ-проверки ЕГЭ
Новости IT • 3 мин чтения

Как я семь раз обманул себя метриками точности ИИ-проверки ЕГЭ

Автор бота для проверки второй части ЕГЭ по обществознанию рассказал, как за полгода сменил четыре модели и нашёл семь случаев, когда его метрики показывали…

Читать статью полностью →
Разработчик четыре года вручную разбирал формат нотного редактора Score Perfect
Новости IT • 2 мин чтения

Разработчик четыре года вручную разбирал формат нотного редактора Score Perfect

Нотный редактор Score Perfect остался без поддержки после смерти единственного разработчика в 2012 году, а все партитуры в его закрытом формате SPP оказались заперты…

Читать статью полностью →