.EXE

Поделись знанием:
Перейти к: навигация, поиск
Исполняемый файл DOS MZ
Расширение

.exe

Сигнатура

MZ или ZM

Разработчик

Microsoft

Тип формата

двоичный, исполняемый, объектный, динамическая библиотека

Расширен из

.COM

Развит в

New Executable
Linear Executable
Portable Executable

.EXE (сокр. англ. executable — исполнимый) — расширение исполняемых файлов, применяемое в операционных системах DOS, Windows, Symbian OS, OS/2 и в некоторых других, соответствующее ряду форматов. Кроме объектного кода может содержать различные метаданные (ресурсы, цифровая подпись[1]).





Форматы .EXE

  • MZ — 16-битный формат, основной формат файлов .EXE в DOS.
    • EXE-файлы для Windows и OS/2 используют другие форматы для основной части программы, но всё равно начинаются с заглушки в формате MZ, которая, как правило, при попытке запустить файл в DOS выводит сообщение This program cannot be run in DOS mode. («Эту программу невозможно запустить в режиме DOS») и завершает выполнение, хотя теоретически может запускать некий произвольный код, работоспособный в DOS.
  • NE — 16-битный формат, использовался в Windows 3.x[2], OS/2 и MS-DOS.
  • LE — смешанный 16- и 32-битный формат, ранее использовался в OS/2 и Windows (VxD).
  • LX — 32-битный формат, используется в OS/2.
  • PE — 32- и 64-битный формат, используется в современных версиях Windows, начиная с Windows NT и Windows 95.

Структура файлов

Файл EXE, создаваемый компоновщиком, состоит из двух частей:

  • управляющая информация для загрузчика;
  • загрузочный модуль.

Информация для загрузчика, описанная ниже, расположена в начале файла и образует так называемый заголовок. Сразу за ним следует тело загрузочного модуля, представляющее собой копию образа памяти задачи, построенной компоновщиком.

Стандартная часть заголовка имеет следующий формат[3]:

00-01 4D5A — сигнатура файла .EXE;
02-03 Длина образа задачи по модулю 512 (то есть число полезных байт в последнем блоке). Компоновщики версий до 1.10 помещали в это поле 04; если оно имеет такое значение, его рекомендуется игнорировать);
04-05 Длина файла в блоках;
06-07 Число элементов таблицы настройки адресов;
08-09 Длина заголовка в 16-байтных параграфах. Используется для выяснения начала тела загрузочного модуля;
0A-0B Минимальный объем памяти, которую нужно выделить после конца образа задачи (в 16-байтных параграфах);
0C-0D Максимальный объем памяти, которую нужно выделить после конца образа задачи (в 16-байтных параграфах);
0E-0F Сегментный адрес начала стекового сегмента относительно начала образа задачи;
10-11 Значение SP при входе в задачу;
12-13 Контрольная сумма — ноль минус результат сложения без переноса всех слов файла;
14-15 Значение IP (счетчика команд) при входе в задачу;
16-17 Сегментный адрес начала кодового сегмента относительно начала образа задачи;
18-19 Адрес первого элемента таблицы настройки адресов относительно начала файла;
1A-1B Номер сегмента перекрытий (0 для корневого сегмента программы).

Далее следует таблица настройки адресов. Таблица состоит из элементов, число которых записано в байтах 06-07. Элемент таблицы настройки состоит из двух полей: 2-байтного смещения и 2-байтного сегмента, и указывает слова в загрузочном модуле, содержащее адрес, который должен быть настроен на место памяти, в которое загружается задача. Настройка производится следующим образом:

  1. В области памяти после резидентной части выполняющей загрузку программы строится префикс программного сегмента (PSP);
  2. Стандартная часть заголовка считывается в память;
  3. Определятся длина тела загрузочного модуля (разность длины файла 04-07 и длины заголовка 08-09 плюс число байт в последнем блоке 02-03). В зависимости от признака, указывающего загружать задачу в конец памяти или в начало, определяется сегментный адрес для загрузки. Этот сегмент называется начальным сегментом;
  4. Загрузочный модуль считывается в начальный сегмент;
  5. Таблица настройки порциями считывается в рабочую память;
  6. Для каждого элемента таблицы настройки к полю сегмента прибавляется сегментный адрес начального сегмента. В результате элемент таблицы указывает на слово в памяти, к которому прибавляется сегментный адрес начального сегмента;
  7. Когда таблица настройки адресов обработана, в регистры SS и SP записываются значения, указанные в заголовке, а к SS прибавляется сегментный адрес начального сегмента. В ES и DS записывается сегментный адрес начала PSP. Управление передается по адресу, указанному в заголовке (байты 14-17).

Структура программного сегмента

К:Википедия:Статьи без источников (тип: не указан)

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

По смещению 0000 в программном сегменте DOS формирует префикс программного сегмента (PSP). Сама программа загружается по смещению 0100.

Программа завершается переходом по адресу 0000 в программном сегменте, выполнив INT 20, выполнив INT 21 с AH=0 или AH=4C, или обратившись к подпрограмме по адресу 0050 в программном сегмент с AH=0 или AH=4C.

Примечание: при завершении иначе, чем операцией 4C, программа должна предварительно заслать в CS адрес начала своего программного сегмента.

Все четыре способа возвращают управление в резидентную часть COMMAND.COM (при этом операция 4C передает код завершения). Все четыре способа приводят к продолжению выполнения программы, обратившейся к операции Exec (4B). При этом вектора прерываний 22, 23 и 24 (завершение, Ctrl-Break, фатальная ошибка обмена) восстанавливаются из Префикса Программного сегмента возобновляемой задачи. Затем управление передается по адресу завершения. Если программа возвращается в COMMAND.COM, то управление передается в нерезидентную часть. Если это происходит во время выполнения командного файла, оно продолжается, иначе COMMAND выдает на терминал приглашение и ждет ввода следующей команды.

Когда загруженная программа получает управление, имеют место следующие условия:

Для всех программ:

  1. В префиксе программного сегмента по смещению 2C передается адрес среды. Среда представляет собой последовательность строк ASCIIZ, вида параметр=значение. Общая длина строк среды не более 32 Кбайт; среда начинается с границы параграфа. После последней строки следует нулевой байт. Среда, передаваемая задаче от COMMAND, содержит, как минимум, параметр COMSPEC=(значение этого параметра - полное имя файла, содержащего используемый COMMAND.COM). Она также содержит значения, установленные командами PATH, PROMPT и SET. Передаваемая среда является копией среды родительского процесса. Если задача остается резидентом, то последующие команды PATH, PROMPT и SET не будут воздействовать на её среду.
  2. По смещению 0050 в префиксе программного сегмента содержится программа обращения к операциям DOS. Таким образом, занеся в AH номер операции, программа может вызвать процедуры (LCALL) по адресу PSP + 50, а не обращаться к прерыванию 21.
  3. Адрес буфера DTA установлен на PSP +80.
  4. Блоки управления файлами, расположенные по смещениям 5C и 6C в префиксе программного сегмента заполняются в соответствии с параметрами командной строки. При этом если соответствующий параметр включает имя каталога, в FCB заносится только код устройства, имя файла формируется неправильно.
  5. Неформатная часть, начинающаяся со смещения 81, содержит символы командной строки после имени команды, включая все пробелы и разделители. По смещению 80 помещена длина этой строки. Если командная строка включает параметры переназначения (на них указывают символы > и <) они не попадают сюда, так как переназначение прозрачно для программ.
  6. Слово по смещению 6 содержит число байт в данном сегменте.
  7. Регистр AX указывает, правильно ли заданы имена устройств в параметрах:
  • AL = FF - имя устройства для первого параметра задано неверно, иначе AL = 00;
  • AH = FF - имя устройства для первого параметра задано неверно, иначе AH = 00.

Для программ .EXE:

  1. DS и ES указывают на начало префикса программного сегмента.
  2. Регистры CS, IP, SS и SP получают значения, указанные компоновщиком.

Для программ .COM:

  1. Все четыре сегментных регистра указывают на префикс программного сегмента.
  2. Программе выделяется вся свободная память. Если программа запускает другие программы операцией Exec, то она должна освободить для неё часть памяти операцией Setblock (4A)
  3. Счетчик команд IP получает значение 0100H.
  4. Регистр SP указывает на конец программного сегмента. Длина сегмента в ячейке 6 префикса уменьшается на 0100H, чтобы освободить пространство для стека такого размера.
  5. На вершину стека помешается нулевое слово.

См. также

Напишите отзыв о статье ".EXE"

Примечания

  1. [www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx Windows Authenticode Portable Executable Signature Format] (англ.). Проверено 11 декабря 2009. [www.webcitation.org/65puJkYad Архивировано из первоисточника 1 марта 2012].
  2. [www.heaventools.com/rt-how-to-open-dll-file.htm How to open a .DLL or .EXE file in Resource Editor] (англ.). Проверено 11 декабря 2009. [www.webcitation.org/65puKUzRB Архивировано из первоисточника 1 марта 2012].
  3. Load Windows Programs From the DOS Prompt With WINSTART // PC Mag. — № 30 июня 1992.

Ссылки

  • [www.delorie.com/djgpp/doc/exe/ EXE Format]  (англ.) — формат заголовка MZ

Отрывок, характеризующий .EXE

Они помолчали.
«Выпускала сокола да из правого рукава», говорила песня, невольно возбуждая бодрое, веселое чувство. Разговор их, вероятно, был бы другой, ежели бы они говорили не при звуках песни.
– Что правда, австрийцев побили? – спросил Долохов.
– А чорт их знает, говорят.
– Я рад, – отвечал Долохов коротко и ясно, как того требовала песня.
– Что ж, приходи к нам когда вечерком, фараон заложишь, – сказал Жерков.
– Или у вас денег много завелось?
– Приходи.
– Нельзя. Зарок дал. Не пью и не играю, пока не произведут.
– Да что ж, до первого дела…
– Там видно будет.
Опять они помолчали.
– Ты заходи, коли что нужно, все в штабе помогут… – сказал Жерков.
Долохов усмехнулся.
– Ты лучше не беспокойся. Мне что нужно, я просить не стану, сам возьму.
– Да что ж, я так…
– Ну, и я так.
– Прощай.
– Будь здоров…
… и высоко, и далеко,
На родиму сторону…
Жерков тронул шпорами лошадь, которая раза три, горячась, перебила ногами, не зная, с какой начать, справилась и поскакала, обгоняя роту и догоняя коляску, тоже в такт песни.


Возвратившись со смотра, Кутузов, сопутствуемый австрийским генералом, прошел в свой кабинет и, кликнув адъютанта, приказал подать себе некоторые бумаги, относившиеся до состояния приходивших войск, и письма, полученные от эрцгерцога Фердинанда, начальствовавшего передовою армией. Князь Андрей Болконский с требуемыми бумагами вошел в кабинет главнокомандующего. Перед разложенным на столе планом сидели Кутузов и австрийский член гофкригсрата.
– А… – сказал Кутузов, оглядываясь на Болконского, как будто этим словом приглашая адъютанта подождать, и продолжал по французски начатый разговор.
– Я только говорю одно, генерал, – говорил Кутузов с приятным изяществом выражений и интонации, заставлявшим вслушиваться в каждое неторопливо сказанное слово. Видно было, что Кутузов и сам с удовольствием слушал себя. – Я только одно говорю, генерал, что ежели бы дело зависело от моего личного желания, то воля его величества императора Франца давно была бы исполнена. Я давно уже присоединился бы к эрцгерцогу. И верьте моей чести, что для меня лично передать высшее начальство армией более меня сведущему и искусному генералу, какими так обильна Австрия, и сложить с себя всю эту тяжкую ответственность для меня лично было бы отрадой. Но обстоятельства бывают сильнее нас, генерал.
И Кутузов улыбнулся с таким выражением, как будто он говорил: «Вы имеете полное право не верить мне, и даже мне совершенно всё равно, верите ли вы мне или нет, но вы не имеете повода сказать мне это. И в этом то всё дело».
Австрийский генерал имел недовольный вид, но не мог не в том же тоне отвечать Кутузову.
– Напротив, – сказал он ворчливым и сердитым тоном, так противоречившим лестному значению произносимых слов, – напротив, участие вашего превосходительства в общем деле высоко ценится его величеством; но мы полагаем, что настоящее замедление лишает славные русские войска и их главнокомандующих тех лавров, которые они привыкли пожинать в битвах, – закончил он видимо приготовленную фразу.
Кутузов поклонился, не изменяя улыбки.
– А я так убежден и, основываясь на последнем письме, которым почтил меня его высочество эрцгерцог Фердинанд, предполагаю, что австрийские войска, под начальством столь искусного помощника, каков генерал Мак, теперь уже одержали решительную победу и не нуждаются более в нашей помощи, – сказал Кутузов.
Генерал нахмурился. Хотя и не было положительных известий о поражении австрийцев, но было слишком много обстоятельств, подтверждавших общие невыгодные слухи; и потому предположение Кутузова о победе австрийцев было весьма похоже на насмешку. Но Кутузов кротко улыбался, всё с тем же выражением, которое говорило, что он имеет право предполагать это. Действительно, последнее письмо, полученное им из армии Мака, извещало его о победе и о самом выгодном стратегическом положении армии.
– Дай ка сюда это письмо, – сказал Кутузов, обращаясь к князю Андрею. – Вот изволите видеть. – И Кутузов, с насмешливою улыбкой на концах губ, прочел по немецки австрийскому генералу следующее место из письма эрцгерцога Фердинанда: «Wir haben vollkommen zusammengehaltene Krafte, nahe an 70 000 Mann, um den Feind, wenn er den Lech passirte, angreifen und schlagen zu konnen. Wir konnen, da wir Meister von Ulm sind, den Vortheil, auch von beiden Uferien der Donau Meister zu bleiben, nicht verlieren; mithin auch jeden Augenblick, wenn der Feind den Lech nicht passirte, die Donau ubersetzen, uns auf seine Communikations Linie werfen, die Donau unterhalb repassiren und dem Feinde, wenn er sich gegen unsere treue Allirte mit ganzer Macht wenden wollte, seine Absicht alabald vereitelien. Wir werden auf solche Weise den Zeitpunkt, wo die Kaiserlich Ruseische Armee ausgerustet sein wird, muthig entgegenharren, und sodann leicht gemeinschaftlich die Moglichkeit finden, dem Feinde das Schicksal zuzubereiten, so er verdient». [Мы имеем вполне сосредоточенные силы, около 70 000 человек, так что мы можем атаковать и разбить неприятеля в случае переправы его через Лех. Так как мы уже владеем Ульмом, то мы можем удерживать за собою выгоду командования обоими берегами Дуная, стало быть, ежеминутно, в случае если неприятель не перейдет через Лех, переправиться через Дунай, броситься на его коммуникационную линию, ниже перейти обратно Дунай и неприятелю, если он вздумает обратить всю свою силу на наших верных союзников, не дать исполнить его намерение. Таким образом мы будем бодро ожидать времени, когда императорская российская армия совсем изготовится, и затем вместе легко найдем возможность уготовить неприятелю участь, коей он заслуживает».]
Кутузов тяжело вздохнул, окончив этот период, и внимательно и ласково посмотрел на члена гофкригсрата.
– Но вы знаете, ваше превосходительство, мудрое правило, предписывающее предполагать худшее, – сказал австрийский генерал, видимо желая покончить с шутками и приступить к делу.
Он невольно оглянулся на адъютанта.
– Извините, генерал, – перебил его Кутузов и тоже поворотился к князю Андрею. – Вот что, мой любезный, возьми ты все донесения от наших лазутчиков у Козловского. Вот два письма от графа Ностица, вот письмо от его высочества эрцгерцога Фердинанда, вот еще, – сказал он, подавая ему несколько бумаг. – И из всего этого чистенько, на французском языке, составь mеmorandum, записочку, для видимости всех тех известий, которые мы о действиях австрийской армии имели. Ну, так то, и представь его превосходительству.
Князь Андрей наклонил голову в знак того, что понял с первых слов не только то, что было сказано, но и то, что желал бы сказать ему Кутузов. Он собрал бумаги, и, отдав общий поклон, тихо шагая по ковру, вышел в приемную.
Несмотря на то, что еще не много времени прошло с тех пор, как князь Андрей оставил Россию, он много изменился за это время. В выражении его лица, в движениях, в походке почти не было заметно прежнего притворства, усталости и лени; он имел вид человека, не имеющего времени думать о впечатлении, какое он производит на других, и занятого делом приятным и интересным. Лицо его выражало больше довольства собой и окружающими; улыбка и взгляд его были веселее и привлекательнее.
Кутузов, которого он догнал еще в Польше, принял его очень ласково, обещал ему не забывать его, отличал от других адъютантов, брал с собою в Вену и давал более серьезные поручения. Из Вены Кутузов писал своему старому товарищу, отцу князя Андрея:
«Ваш сын, – писал он, – надежду подает быть офицером, из ряду выходящим по своим занятиям, твердости и исполнительности. Я считаю себя счастливым, имея под рукой такого подчиненного».
В штабе Кутузова, между товарищами сослуживцами и вообще в армии князь Андрей, так же как и в петербургском обществе, имел две совершенно противоположные репутации.
Одни, меньшая часть, признавали князя Андрея чем то особенным от себя и от всех других людей, ожидали от него больших успехов, слушали его, восхищались им и подражали ему; и с этими людьми князь Андрей был прост и приятен. Другие, большинство, не любили князя Андрея, считали его надутым, холодным и неприятным человеком. Но с этими людьми князь Андрей умел поставить себя так, что его уважали и даже боялись.
Выйдя в приемную из кабинета Кутузова, князь Андрей с бумагами подошел к товарищу,дежурному адъютанту Козловскому, который с книгой сидел у окна.
– Ну, что, князь? – спросил Козловский.
– Приказано составить записку, почему нейдем вперед.
– А почему?
Князь Андрей пожал плечами.
– Нет известия от Мака? – спросил Козловский.
– Нет.
– Ежели бы правда, что он разбит, так пришло бы известие.
– Вероятно, – сказал князь Андрей и направился к выходной двери; но в то же время навстречу ему, хлопнув дверью, быстро вошел в приемную высокий, очевидно приезжий, австрийский генерал в сюртуке, с повязанною черным платком головой и с орденом Марии Терезии на шее. Князь Андрей остановился.