Osegi
Logiciels·2 min de lecture

Borland C++ 2.0 : le code source refait à partir de BCC.EXE, octet par octet

Borland n'a jamais publié le code source de Borland C++ 2.0. Le projet borland-reborn l'a reconstruit depuis le binaire de 1991, avec un BCC.EXE identique à l'octet près.

A vintage DOS screen showing a Borland C++ 2.0 command-line compiler prompt next to lines of recovered C source code.
Image: Хабр

Le code source de Borland C++ 2.0, sorti en 1991, n'a jamais été publié. Il existe pourtant maintenant, reconstruit à partir de l'exécutable du compilateur lui-même. Compilé avec la chaîne d'outils d'origine de Borland, il produit un BCC.EXE dont l'empreinte SHA-256 est celle du vrai.

Le projet s'appelle borland-reborn. Il contient 298 fichiers sources répartis en 15 répertoires : 265 en C (issus de Borland C++ 2.0 et de Turbo C 2.01) et 33 modules d'assembleur TASM écrits à la main. La séparation d'origine entre C compilé et assembleur manuel a été conservée. Le préprocesseur autonome CPP.EXE se reconstruit lui aussi octet par octet.

Comment le code source de Borland C++ 2.0 a-t-il été retrouvé ?

Il a d'abord fallu deviner la bonne version du compilateur et toutes ses options, car une fonction ne correspond que si tout est juste. L'auteur a ainsi découvert que 29 modules de la bibliothèque avaient été compilés avec Turbo C 2.01. Les fonctions ont ensuite été ajustées une à une jusqu'à ce que chaque octet coïncide.

Ce n'est qu'après que le code a été rendu lisible : environ 3 100 noms, 300 champs d'enregistrements, 40 structures et quelque 10 000 lignes de commentaires. Chaque modification ultérieure, même un simple renommage, doit repasser le même test octet par octet.

Qu'a-t-on découvert dans le compilateur ?

L'analyseur syntaxique est écrit à la main, en descente récursive, avec un analyseur d'expressions par priorité d'opérateurs et sans yacc. Les notes relèvent aussi des bogues probables : strrchr lit un octet avant une chaîne vide, et l'espace libéré dans le fichier d'en-têtes précompilés n'est jamais réutilisé.

Les programmes de Borland ne sont pas inclus : pour recompiler, il faut se procurer soi-même les distributions d'origine. Les scripts et la documentation sont sous licence MIT. Le code reconstruit provient de logiciels Borland protégés par le droit d'auteur et il est publié à des fins d'étude et de conservation, sans revendication de droits.

Le travail repose sur Exhume, une boîte à outils pour Claude Code issue de la décompilation d'Ultima Underworld II.

Des apps à découvrir

SUMO : le puzzle de nombres

Touche les bonnes cases, additionne, atteins l'objectif. Facile à apprendre, difficile à maîtriser. Gratuit, pour tous les âges.

Mots-clés:borland c++borland-rebornreverse engineeringdecompilationretrocomputingexhume

Plus d'actus de ce jour

Tout voir →

Plus dans: Logiciels

Tout voir →