Загрузка 0
ПОДЕЛИТЬСЯ

Мой блог

Листай вниз

Почему миллиарды файлов EXE в Windows начинаются с инициалов разработчика

Почему миллиарды файлов EXE в Windows начинаются с инициалов разработчика

Если открыть практически любой исполняемый файл в шестнадцатеричном редакторе, в самом начале можно заметить характерную комбинацию символов MZ. Данный маркер присутствует как в современных программах, так и в софте десятилетней давности, а также в библиотеках DLL. Эти буквы не относятся к машинному коду или названию компании, а представляют собой инициалы программиста Марка Збиковского, которые сохранились в структуре программного обеспечения спустя десятилетия после ухода из употребления систем, для которых они создавались.

Структура заголовка и сигнатуры PE в исполняемом файле Windows
Общий вид заголовков и сигнатур внутри исполняемого файла Windows.

Привычные расширения файлов служат подсказкой для операционной системы, однако внутреннее устройство формата содержит фиксированные маркеры для проверки содержимого. Для стандартных исполняемых файлов Windows, известных как Portable Executable или PE, первые два байта в шестнадцатеричном коде выглядят как 4D 5A, что при текстовом переводе дает инициалы MZ. Подобные сигнатуры файлов или «магические числа» позволяют программному обеспечению определять тип содержимого независимо от расширения, указанного в имени.

Исторические корни структуры EXE

Маркер MZ появился задолго до появления формата PE и происходит из заголовка старых исполняемых файлов MS-DOS, где это значение применялось в качестве сигнатуры запуска. Марк Збиковский выступал в роли одного из первоначальных разработчиков MS-DOS, поэтому его инициалы оказались заложены в основу формата. Подобные особенности демонстрируют, как современные форматы файлов в ОС Windows продолжают нести в себе элементы архитектуры из эпохи компьютеров 1980-х годов.

Реклама

Внутреннее устройство файлов PE

Современные 64-битные приложения не используют MS-DOS для базовой работы и опираются на формат Portable Executable, который охватывает файлы с расширениями EXE, DLL и ряд других программных компонентов. При изучении содержимого файла сразу после первых двух байт обнаруживается заголовок DOS. Внутри этого раздела находится поле e_lfanew, содержащее смещение, которое указывает на место начала PE-заголовка.

Переход по данному указателю приводит к обнаружению второй сигнатуры, состоящей из символов PE\0\0. Эти четыре байта служат официальным подтверждением того, что приложение относится к современному программному обеспечению для Windows. Общая структура файла включает заголовок DOS, заглушку DOS, сигнатуру PE, заголовки PE и специализированные секции.

Упомянутые секции содержат исполняемый код, базовые данные, таблицы импорта, ресурсы вроде значков, информацию о релокациях и другие элементы, необходимые операционной системе для загрузки. Поскольку библиотеки DLL применяют ту же базовую архитектуру PE, аналогичное расположение байтов можно встретить при проверке файлов в системных каталогах.

Заглушка DOS и ее назначение

Между заголовками DOS и PE располагается вспомогательный элемент, известный как заглушка DOS. Компоновщик Microsoft обычно размещает в этой области компактную программу для DOS, которая выводит текстовое сообщение при попытке запустить исполняемый файл в устаревшей среде. Подобная надпись с предупреждением о невозможности запуска в режиме DOS периодически встречается при детальном изучении бинарной структуры приложений.

Причины сохранения старого формата

Возникает закономерный вопрос о целесообразности сохранения устаревшей структуры в современных выпусках операционной системы, которая больше не нуждается в DOS для запуска приложений. Причиной выступает не только обратная совместимость со старым софтом, поскольку многие архивные программы требуют дополнительных настроек для запуска на новых версиях платформы.

Главный фактор заключается в том, что этот заголовок стал неотъемлемой частью формата PE, ожидаемого самой операционной системой и инструментами разработки. Полное удаление структуры потребовало бы изменения самого формата исполняемых файлов или внедрения альтернативной схемы разметки ради устранения исторического рудимента. Вместо этого разработчики предпочли расширять существующий формат. При переходе на 64-битную архитектуру стандарт PE32+ изменил необходимые поля для поддержки увеличенного размера изображений, сохранив узнаваемость остальной структуры.

01.