Воскресенье, 12.01.2025, 03:47
Приветствую Вас Гость | RSS

блокнот

article

Главная » Статьи » other

Формат exe для dos
Заметка: все мультибайтовые ценности сохранены LSB сначала. Один блок составляет 512 байтов, один параграф составляет 16 байтов. См. также входные прерывания Ральфа Брауна ListOffset (hex)

Означает
00-01 0x4d, 0x5a. Это – «магическое число» файла EXE. Первый байт файла – 0x4d, и вторым является 0x5a.
02-03 Число байтов в последнем блоке программы, которые фактически используются. Если эта значение – ноль, то это означает, что весь последний блок используется (то есть эффективное значение 512).
04-05 Число блоков в файле, которые являются частью файла EXE.Только если [02-03] являются отличными от нуля, то большая часть последнего блока используется.
06-07 Число данных перемещения, хранящихся после заголовка. Может быть нулевым.
08-09 Число параграфов в заголовке. Данные программы начинаются только после заголовка и эта область может использоваться, чтобы вычислить подходящее файловое смещение. Заголовок включает перемещенные записи. Заметьте, что некоторые OS и/или программы могут потерпеть рухнуть, если заголовок не кратен числу 512 байтов.
0A-0B Число параграфов дополнительной памяти, в которой будет нуждаться программа. Это – эквивалент размера BSS в программе Unix. Программа не может быть загружена, если нет по крайней мере этой памяти, доступной для нее.
0C-0D Максимальное число параграфов дополнительной памяти. Обычно, OS резервирует всю остающуюся обычную память для вашей программы, но вы можете ограничить это, играясь с этой областью(полем).
0E-0F Относительное значение сегмента стека. Эта значение добавлено к сегменту, в котором была загружена программа и результат используется, чтобы калибровать регистр SS.
10-11 Начальная знвчение регистра SP.
12-13 Контрольная сумма. Если установлено должным образом, 16-битовая сумма всех слов в файле должна быть нолем. Обычно, это не заполнено.
14-15 Начальное значение IP регистра.
16-17 Начальное значение регистра CS, относительно сегмента программа была загружена.
18-19 Смещение первого пункта перемещения в файле.
1A-1B Оверлейное число. Обычно ноль, означая, что это – главная программа.

Вот структура, которая может быть использована, чтобы репрезентовать заголовок EXE и данные перемещения, принимающие 16- битовую машину LSB:

Code

struct EXE {
unsigned short signature; /* == 0x5a4D */
unsigned short bytes_in_last_block;
unsigned short blocks_in_file;
unsigned short num_relocs;
unsigned short header_paragraphs;
unsigned short min_extra_paragraphs;
unsigned short max_extra_paragraphs;
unsigned short ss;
unsigned short sp;
unsigned short checksum;
unsigned short ip;
unsigned short cs;
unsigned short reloc_table_offset;
unsigned short overlay_number;
};

Code

struct EXE_RELOC {
unsigned short offset;
unsigned short segment;
};

Смещение начала данных EXE вычислено подобно этому:

exe_data_start = exe.header_paragraphs * 16L;
Смещение байта стоящего после данных EXE (в DJGPP, размер заглушки и начало образа COFF), вычислены подобно этому:

Code

extra_data_start = exe.blocks_in_file * 512L;
if (exe.bytes_in_last_block)
extra_data_start -= (512 - exe.bytes_in_last_block);
Категория: other | Добавил: gen (28.09.2010)
Просмотров: 1081
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

EzH->

link

Категории раздела

other [13]
translate [0]
STL [2]
Doxygen [2]
pcap.net [1]
Шарпомир [11]
Builder C++ / C / C++ [7]
Программирование МК [1]
Разработка программ для МК, анализ кода и эксперименты с железом

депозит

Поиск