О таблице релокаций в заголовке DOS EXE

альтернативный текст

Из приведенного выше видно, что количество записей в таблице перемещений равно 0 (элемента перемещения нет), но смещение первого элемента перемещения показывает, что элемент перемещения действительно существует.

Определение заголовка DOS EXE находится здесь.

Как понять это?


person COMer    schedule 26.09.2010    source источник
comment
Ссылка не работает. Было бы неплохо, если бы вы включили важную часть упомянутой ссылки в сам вопрос (предположим, что ссылки рано или поздно сломаются).   -  person skyking    schedule 04.04.2017


Ответы (2)


Это нормально. Для современных форматов, таких как PE, смещение таблицы перемещений всегда равно 0040H, даже если элементов перемещения нет.

person I. J. Kennedy    schedule 29.09.2010
comment
Занимает ли место таблица перемещений, если в ней нет элементов? - person COMer; 30.09.2010
comment
Нет, таблица перемещений не занимает места, если в ней нет элементов. Взгляните на байты по смещению 0040H. Вы увидите первые машинные инструкции программы. - person I. J. Kennedy; 30.09.2010

Вы должны посмотреть на размер заголовка EXE (показан как DOS_HdrSize на скриншоте). Это количество абзацев (16-байтовых блоков), которые использует весь заголовок.

В вашем примере это 0x0004, поэтому умножьте его на 16, и вы получите длину заголовка как 0x40 байт. Таблица перемещений начинается со смещения таблицы перемещений и продолжается для DOS_ReloCnt записей до конца заголовка.

В вашем случае смещение таблицы перемещений равно 0x40, а конец заголовка также равен 0x40, поэтому для таблицы перемещений нет места, что тоже хорошо, поскольку DOS_ReloCnt говорит, что в ней нет записей.

В этом случае, вероятно, не имеет значения, какое значение установлено для смещения таблицы перемещений.

person Malvineous    schedule 21.01.2021