Тема: Установка DOS-заглушки любого размера
Некоторое время назад мне на почту написал разработчик, занимающийся встраиваемыми системами для авиации и космических систем. Ему нужна программа, работающая из командной строки и позволяющая заменить заглушку PE-файла на DOS-программу любого размера, как собрана, например, Bootpart.
Существующая процедура замены заглушки в PE Tool разрабатывалась по большей части ради минимального размера оной (64 байта), нынче встроенной в саму Pet. На больши́х заглушках программа не тестировалась. На предоставленных мне примерах PE Tool 0.6 выдает невалидный файл, а в разрабатываемой ветке 0.7 в качестве превентивной меры выдается ошибка о невозможности замены (это было реализовано еще 2 года назад, задолго до описываемых событий).
Совместными усилиями мы также нашли pe-setstub — скрипт на Perl, меняющий заглушки. С тестовыми примерами он не справился:
setstub.pl: fatal: stub is too long (6628 > 3528) (trylshs = 7680 > 4096), and has relocations: STUB.EXE
Я пока в отпуске, и на правах проекта выходного дня решил посмотреть, насколько сложно переписать перебазирование таким образом, чтобы можно было и заглушки заменять, и слияние секций потом делать. Уже удалось добиться укладки компонентов PE-файла с нужными смещениями, но Windows пока не хочет признавать его приложением Win32.
Не знаю, удастся ли отладить код до конца. По времени проекта выходного дня остался один день. Возможно, придется загрузить код на GitHub как есть, чтобы посмотрел кто-то еще. Тестовые примеры прикрепил. Мой «заказчик» на Delphi не пишет, к сожалению.