Focus Core

Mój pierwszy kompilator
xD Pozdrowienia dla dociekliwych xD

2007-08-25

Objconv - przybyłem, zobaczyłem i zmieniłem pliki pośrednie.

Nowe przemyślenia o pośrednim formacie (pliki gotowe do linkowania w binarkę) i odkrycia :).

OBJCONV

Przeszukując google we wszystkie strony (od niepamiętnych czasów szukałem jakiegoś "dobrego" programu do konwersji COFF na OMF i... w końcu znalazłem) odkryłem ciekawy i dość nowy program (tz. z tego roku tj. 2007) do konwersji nie tyle z COFF do OMF to i z OMF do COFF (!) i z wszystkiego na wszystko :). Jak dla mnie genialne, w dodatku z kodem źródłowym, drukuje informacje lepsze od TDUMP, a ponadto potrafi zdeasemblować te wszystkie binarki (w tym EXE i DLL!). Zwie się Objconv i można go ściągnąć pod tym adresem.

UNDNAME

Przydatna zabawka M$ potrafi odkodować nazwy procedur wyciągniętych z plików COFF. I tu się rozczarowałem :(. Pliki OMF *.obj generowane przez Borland są dużo bardziej skomplikowane od plików COFF *.obj m$ (swoją drogą zabawne jest to, że niektóre kompilatory wieloplatformowe GPL/LGPL C++/Pascala generują pliki COFF a nie OMF... Format COFF jest przystosowany pod Windowsowe pliki EXE a nie pod Linuxowe BINarki...). Szkoda, że tak ważne pliki o takim samym rozszerzeniu mają inną budowę. OMF bije na głowę pliki COFF (patrząc na logi z plików OMF a COFF i ich uniwersalność). Właściwie to szkoda, że mają taką zawiłą strukturę przystosowana pod obiektowe kodowanie - będę musiał zrezygnować z tych plików.

Z Delphi do C++ i z C++ do Delphi

Skoro jestem przy temacie, trudno nie napisać o moich nowych odkryciach :). Nie tak dawno usiłowałem przenieść ciekawy silnik 2D Haaf's Game Engine do Delphi (wzorowany na silniku Grim 2D, jednej z moich ulubionych gier : Crimsonland), przez Turbo C++ dzięki wspomnianym plikom OMF *.obj (które Delphi potrafi w siebie wkompilować). Niestety :(. Borland C++ generuje inne pliki omf niż Delphi x_X. Nie tyle co inne, tylko o bardziej skomplikowanej strukturze. To niesprawiedliwe! Pliki OMF generowane w Delphi, C++ Builder używa sprawnie... Całe szczęście, że programuję w Delphi :D. Dzięki temu nie będzie problemu gdybym chciał użyć mojego kod w C++ Builder, bo ten potrafi sobie sam wygenerować pliki *.hpp (nagłówki z przekonwertowanymi typami Delphi na kod C++ i procedurami), skompilować *.pas do OMF *.obj i używać go xD... Tylko po co mam to robić? Może kiedyś się przyda ;).

Z C do Delphi

Dobrze, że chociaż plików *.c można "prawie" używać w Delphi :). Najpierw trawimy je w C++ Builder a później wciskamy do Delphi przez {$L plik.obj} i uzupełniamy luki w procedurach o jakie woła wygenerowany *.obj (artykuł o tym jest tutaj). Tak można przenieść np. język LUA (bez DLL) do Delphi w kilka minut, przez *.obj.

Podsumowanie

Mój format pośredni będzie nieco inny od COFF czy OMF. Użyję czegoś wygodniejszego :) (jak pisałęm gdzieś niżej) i zyskam sporo czasu bo nie będę musiał tracić go na "dokładne" poznawanie wspomnianych formatów (w przyszłości). W końcu moje pliki binarne mają pełnić nieco inną rolę, będą to pliki pośrednie i zarazem gotowe skrypty. Mam nadzieję, że ktoś dożyje jeszcze do następnego posta :D - na razie priorytet to DaThoX i Delphi GameDev - ale... Niebawem przejdę do intensywnych prac nad GUI a tam przydałaby się pomoc szybkiego języka skryptowego JIT. A patrząc na to co jest, wyprodukowanie działającej wersji nie powinno być takie trudne (tylko skrypt i kod bez kompilowania do EXE) i zbyt zajmujące.