Статьи по Assembler


Минимальная stub-программа - часть 2


Умная Windows поступает более изощренно:

  • по аббревиатуре MZ определяет наличие заголовка MS-DOS. Определив, продолжает процесс:
  • считывает двойное слово по смещению 3ch. Здесь компоновщик заботливо записал смещение PE-заголовка.
  • считывает PE-заголовок по указанному смещению и пытается выполнить его разбор. Если это удается - продолжает процесс загрузки приложения, который нас здесь больше не интересует.

 

Как сделать собственную stub-программу? Да очень просто! Напишите любую, сколь угодно сложную или простую DOS-программу. Только постарайтесь обойтись без извращений вроде перевода процессора в защищенный режим или показа картинок в режимах VESA: помните, что stub-программа должна сработать с флоппи-диска на 8086-й машине с текстовым монитором. Модель памяти можно использовать любую, кроме tiny - она для stub-программы не годится.

И это, к сожалению, неизбежно, как бы ни печалилась по этому поводу душа настоящего ассемблерщика. Ведь модель tiny порождает com-формат исполняемого модуля, не имеющий, как известно, никакого заголовка. А раз нет заголовка - то даже умная Windows не сможет узнать размер stub-программы и, соответственно, вычислить начало PE-заголовка. Глупая DOS ненамного легче переварит эту ситуацию. Обнаружив, что файл является исполняемым (имеет расширение exe, как положено в Windows), она выяснит также, что его фактический формат - com (отсутствует сигнатура MZ), и попытается-таки его загрузить и исполнить. Однако stub-программа сработает только в том случае, если размер исполняемого файла не превысит 64К, что для приложений Windows (даже написанных на ассемблере) - довольно редкое исключение. Скорее всего, ваш пользователь вместо цветного пожелания перейти, в конце концов, на новую ОС, получит сухое монохромное сообщение командного процессора о чрезмерном размере исполняемого модуля.

Важно! При компоновке stub-программы в командной строке компоновщика укажите недокументированную и загадочно звучащую опцию /KNOWEAS. Это опция вносит некие изменения в заголовок exe-файла. Если опцию не указать, то компоновка Windows-приложения со stub-программой окажется некорректна, о чем вы получите соответствующее предупреждение от линкера.




- Начало -  - Назад -  - Вперед -



Книжный магазин