В этот раз не
5 лет прошло, а всего 2...
Глядя на товарища
ALEXS1983, решил выложить свою альфу. В части поддержки KolibriOS это даже не альфа, а скорее концепт, поскольку генерируемые файлы неработоспособны в KolibriOS. Нужно дорабатывать и отлаживать, но времени нет. Пример
ww.pas я взял из
сообщения выше, только переделал в программу, поскольку для PE Tool нужен exe- или dll-файл, а не .dcu.
PE Tool — это единая утилита для пересборки PE-файлов, основанная на самописном модуле ExeImages, выполняющем все манипуляции. От других утилит (pe2kos, exe2kos, pe2kex) PE Tool отличается полноценным разбором PE-файла и богатым набором ключей, где планируемый экспорт в MENUETxx — только один из режимов. Остальные функции
уже работают, программа давно лежит
на SourceForge, иногда ее скачивают. Если поддержку KolibriOS удастся довести до ума, получится по-настоящему гибкая технологическая утилита, не зависящая от имен секций, предопределенных адресов, версий компиляторов и пр. Скажем, выбор между MENUET01 и MENUET02 в ней делается автоматически, на основе присутствия сегмента TLS в PE-файле, а присутствие TLS определяется не по имени .tls, а из соответствующего поля в каталоге данных PE.
С момента выкладывания
3 года назад формат KOLIBRI был выпилен, зато реализовано перебазирование (метод ExeImages.TImage.Rebase), которое и нужно доработать. Об особенностях форматов MENUETxx я объяснял на
видео. Поскольку MENUETxx -- плоский бинарник с заголовком, без заголовка это будет плоский бинарник (да, кэп!), то есть на Delphi формально можно будет написать ядро ОС. "Тулчейн" для Delphi будет включать в себя dcc32 и pet.
Примеры вызова PE Tool:
Code: Select all
// преобразование в MENUETxx
pet -strip -trunc -menuet -dropsect .idata,.rsrc ww.exe -into ww.kex
// получение списка секций PE-файла
pet -ls ww.exe
От официально вышедшей
PE Tool 0.5 выкладываемая альфа отличается присутствием ключа
-menuet. Можете скачать, собрать, поотлаживать...
В теории экспорт не привязан к Delphi, преобразовывать в MENUETxx можно будет PE-файлы других компиляторов. На практике для C/C++ это неактуально, поскольку у них есть свой ld. На Delphi же никто не пишет, поэтому спроса нет, и разработка идет вяло. Ну, и время, уже говорил.