Удалить заглушку DOS из PE-файла - PullRequest
11 голосов
/ 11 марта 2012

Можно ли удалить заглушку DOS и заголовок DOS из PE-файла ??

Ответы [ 4 ]

13 голосов
/ 12 марта 2012

Файл PE должен начинаться с IMAGE_DOS_HEADER, за которым в некоторый момент следует структура IMAGE_NT_HEADERS, которая определяет современные поля PE.

IMAGE_DOS_HEADER имеет два обязательных поля - e_magic должен содержать значение IMAGE_DOS_SIGNATURE (которое выглядит как 'MZ' в ASCII), а e_lfanew должно быть смещением от начала файла до начала IMAGE_NT_HEADERS.

Помимо этих двух полей, остальная часть IMAGE_DOS_HEADER является необязательной для Windows после 16-разрядной Windows и может быть нулевой, а заглушка DOS необязательна и может быть опущена.

Минимальный соответствующий PE-файл начинается с IMAGE_DOS_HEADER, где для e_magic установлено значение IMAGE_DOS_SIGNATURE, а для e_lfanew установлено значение sizeof (IMAGE_DOS_HEADER), за которым сразу следует IMAGE_NT_HEADERS.

7 голосов
/ 12 марта 2012

Удаление заглушки Dos не имеет ничего общего с заголовком Dos. Да, можно удалить заглушку Dos (так как она больше не используется). Вы даже можете уменьшить размер заголовка Dos до минимума (MZ + переход к заголовку PE). Но вы не можете полностью удалить заголовок Dos. В противном случае загрузчик Windows откажется запускать образ, если MZ и переход к заголовку PE отсутствуют.

4 голосов
/ 11 марта 2012

Нет простого способа удалить его, не нарушив формат файла.

Но, хм, нашел это .

0 голосов
/ 31 мая 2016

Вы не можете уменьшить размер заголовка Dos до его «минимума».К сожалению, поле длины является последним полем в IMAGE_DOS_HEADER.Таким образом, он имеет фиксированный размер 64 байта.

...