Удалить заглушку DOS из PE-файла

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

4 ответов


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

но ЭМ, нашел этой.


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-битных окон и может быть нулевым, а заглушка DOS необязательна и может быть опущена.

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


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


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