Osegi
Oprogramowanie·2 min czytania

Borland C++ 2.0: kod źródłowy odtworzony z BCC.EXE bajt w bajt

Borland nigdy nie opublikował kodu Borland C++ 2.0. Projekt borland-reborn odtworzył go z binarki z 1991 roku i po kompilacji dostaje identyczny BCC.EXE.

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

Borland nigdy nie udostępnił kodu źródłowego Borland C++ 2.0. Teraz ktoś go odtworzył z samego pliku BCC.EXE z 1991 roku. Po zbudowaniu oryginalnymi narzędziami Borlanda wychodzi plik zgodny z fabrycznym co do bajtu, z tą samą sumą SHA-256.

Projekt nazywa się borland-reborn. Zawiera 298 plików źródłowych w 15 katalogach: 265 w C (Borland C++ 2.0 i Turbo C 2.01) oraz 33 moduły pisane ręcznie w TASM. Podział na kod skompilowany i ręczny asembler z oryginału został zachowany. Na razie gotowe są BCC.EXE i osobny preprocesor CPP.EXE. Kolejne wersje Borlanda i Turbo mają dojść później.

Jak odtworzono kod źródłowy BCC.EXE

BCC.EXE zbudowano w Borland C++ 2.0, z TASM 2.51 dla części ręcznych i TLINK 4.0 z menedżerem overlayów VROOMM. Funkcja zgadza się z oryginałem tylko wtedy, gdy trafi się w kompilator, jego wersję i wszystkie przełączniki. Autor zaczął więc od ich dobrania i ustalił, że 29 modułów biblioteki zbudowano jeszcze w Turbo C 2.01. Potem dopasowywał funkcje jedna po jednej, aż zgodził się każdy bajt.

Dopiero wtedy kod uczyniono czytelnym dla ludzi: około 3100 nazw funkcji, zmiennych globalnych i etykiet, 300 pól rekordów i około 10 000 linii komentarzy. Każda zmiana, także zmiana nazwy, jest sprawdzana tym samym testem bajt w bajt.

Jakie błędy znaleziono w Borland C++

Przy okazji wyszły błędy samego kompilatora. Funkcja strrchr czyta bajt przed pustym ciągiem znaków. Miejsce zwolnione w pliku prekompilowanych nagłówków nigdy nie jest używane ponownie. Parser napisano ręcznie, metodą zejść rekurencyjnych, z parserem wyrażeń opartym na priorytetach operatorów, bez yacc. A łączenie ogonów w generatorze kodu wpłynęło na to, jak trzeba było pisać źródła.

Oryginalnych programów Borlanda w repozytorium nie ma, do przebudowy trzeba samemu pobrać ich dystrybucje. Jest też wersja do modyfikacji kompilatora: przetestowano ją na 1836 kompilacjach, a testy wykonują 83% jego kodu. Własne skrypty projektu mają licencję MIT, a odtworzone źródła pochodzą z programów chronionych prawem autorskim i udostępniono je do nauki i zachowania, bez rościenia sobie praw.

Aplikacje warte uwagi

SUMO: łamigłówka liczbowa

Wybierz właściwe pola, dodaj je i trafiaj w cel. Łatwa do nauczenia, trudna do opanowania. Za darmo, dla każdego wieku.

Tagi:borland c++borland-rebornreverse engineeringdecompilationretrocomputingexhume

Więcej z tego dnia

Zobacz wszystkie →

Więcej w kategorii: Oprogramowanie

Zobacz wszystkie →