2

Как мы знаем, exe-файлы обычно начинаются с 4D5A или 'MZ' в ASCII. Как бы я изменил заголовок, в то же время позволяя файлу работать как обычно?

Прямо сейчас я смотрю на exe-файл ccleaner. К сожалению, у меня нет 10 представителей, поэтому я не могу опубликовать скриншот.Но ASCII справа говорит, что программа не может быть запущена в ASCII, поэтому делает 4D5A бесполезным? Технически, могу ли я заменить 4D5A на что-то другое, и оно все равно будет работать?

Если здесь есть парни из старшей школы, очень много информации о «DOS MZ».

Это изображение, на которое я смотрел:

CCleaner Hex View

1 ответ1

3

Как бы я изменил заголовок, в то же время позволяя файлу работать как обычно?

Вы не можете!

Есть причина, по которой строка MZ (16 битов, представляющих 0x5A4D) называется "магическим" числом и действительно требуется согласно спецификации EXE/PE (с корнями вплоть до исполняемых файлов формата DOS). Компоновка всех современных переносимых исполняемых файлов выглядит следующим образом (ссылка):

В этой статье MSDN, касающейся формата Portable Executable, заголовок MS-DOS подробно описан:

Заголовок MS-DOS

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

Первые байты PE-файла начинаются с традиционного заголовка MS-DOS, который называется IMAGE_DOS_HEADER . Единственными двумя значениями любой важности являются e_magic и e_lfanew . Поле e_lfanew содержит смещение файла заголовка PE.

Поле e_magic (WORD [NB: 16 бит]) должно быть установлено значение 0x5A4D . Для этого значения есть #define именем IMAGE_DOS_SIGNATURE . В представлении ASCII 0x5A4D - это MZ , инициалы Марка Збиковского, одного из первоначальных архитекторов MS-DOS.


Для получения дополнительной информации о Windows PE/.Формат EXE, я настоятельно рекомендую взглянуть на раздел « Исполняемые файлы Windows» в x86 Disikimbly Wikibook. Он содержит обширный массив низкоуровневой информации о формате.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .