Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




IMAGE_OPTIONAL_HEADER

- ¤ Magic: Так как это поле всегда равно 010Bh, похоже, что это какая-то сигнатура. Не интересно.

- ¤ Старшая и младшая версии линкера: Версия линкера, который создал файл. Не интересно.

- ¤ Размер кода: Количество байт (округленное) во всех секциях, содержащих исполняемый код.

- ¤ Размер инициализированных данных: Предполагается, что здесь должен указываться общий размер всех секций с инициализированными данными.

- ¤ Размер неинициализированных данных: Неинициализированные данные не занимают места на винте, но когда система загружает файл, она выделяет ему некоторое количество памяти (виртуальную память).

- ¤ Адрес точки входа: Где загрузчик начнет выполнение кода. Это RVA относительно базы образа, когда система загружает файл. Очень интересно.

- ¤ База кода: RVA, откуда начинаются секции файла с кодом. Секции с кодом обычно идут до секций с данными и после PE-заголовка. Для файлов, произведенных с помощью микрософтовских линкеров, этот RVA обычно равен 0x1000. TLINK32, похоже, добавляет к этому RVA базу образа и сохраняет результат в данном поле.

- ¤ База данных RVA, откуда начинаются секции с данными. Они обычно идут последними после PE-заголовка и секций с кодом.

- ¤ База образа: Когда линкер создает экзешник, он предполагает, что файл будет промэппирован в определенное место в памяти. Этот адрес и хранится в данном поле, делая возможным определенную оптимизацию со стороны линкера. Если файл действительно промэппирован по этому адресу, код не нуждается в каком-либо патчении перед запуском. В экзешниках, компилируемых для Windows NT, база образа по умолчанию равна 0x10000, а для DLL он по умолчанию равен 0x400000. В Win9x адрес 0x10000 не может использоваться при загрузке 32-х битных EXE, так как он находится внутри региона, разделяемого всеми процессами. Из-за этого Микрософт изменил адрес базы по умолчанию на 0x400000.

- ¤ Выравнивание секций: При мэппировании секции выравниваются таким образом, чтобы они начинались с виртуального адреса, кратного данному значению. Выравнивание секций по умолчанию равно 0x1000.

- ¤ Файловое выравнивание: В PE-файле raw-данные, представляющие каждую из секций, начинаются со значения, кратного данному параметру. По умолчанию он равен 0x200, вероятно, потому что тогда секции будут начинаться с начала сектора диска (который также равен 0x200 байтам). Это поле эквивалентно размеру выравнивания сегментов/ресурсов в NE-файлах. В отличии от NE-файлов, PE-файлы не имеют сотен секций, поэтому на файловое выравнивание уходит очень мало место.

- ¤ Старшая и младшая версии операционной системы: Минимальная версия операционной системы, которая требуется для использования данной программы. Назначение данного поля не совсем ясно, так как поля подсистемы служат, похоже, той же самой цели. Это поле по умолчанию равно 1.0.

- ¤ Младшая и старшая версии образа: Задаваемое пользователем поле. Оно позволяет вам иметь разные версии EXE или DLL. Вы можете установить значения этих полей с помощью опции линкера /VERSION. Например "LINK /VERSION:2.0 myobj.obj".

- ¤ Старшая и младшая версии подсистемы: Содержат минимальную версию подсистемы, которая требуется для запуска данной программы. Типичное значение этого поля - 3.10 (что означает Windows NT 3.1).

- ¤ Зарезервировано1: Похоже, что оно всегда равно 0 (идеально для метки заражения).

- ¤ Размер образа: Похоже, что это полный размер всех частей образа, о которых должен позаботиться загрузчик. Это размер региона, начинающегося от базы образа до конца последней секции, который округляется до ближайшего числа, кратного выравниванию секций.

- ¤ Размер заголовков: Размер PE-заголовка и таблицы секций (объектов). Raw-данные секций начинаются непосредственно после всех компонентов заголовка.

- ¤ Чексумма: Предположительно CRC файла. Как и в других микрософтовских форматах исполняемых файлов, это поле игнорируется и устанавливается в 0. Есть одно исключение из этого правила: в доверенных (trusted) сервисах и EXE это поле должно содержать верную чексумму.

- ¤ Подсистема: Тип подсистемы, используемой приложением для пользовательского интерфейса.

- NATIVE 1 Не требует подсистемы (например драйвер устройства)- WINDOWS_GUI 2 Выполняется в подсистеме Windows GUI- WINDOWS_CUI 3 Выполняется в символьной подсистеме Windowso (консольное приложение)- OS2_CUI 5 Выполняется в символьной подсистеме OS/2 (только OS/2o 1.x)- POSIX_CUI 7 Выполняется в символьной подсистеме Posix

- ¤ Характеристики DLL: Набор флагов, задающий при каких условиях будет вызываться функция инициализации DLL (например DLLMain). Похоже, что это значение всегда равно 0, тем не менее операционная система вызывает инициализацию DLL для всех 4-х событий.

- Вызывать инициализацию, когда DLL впервые загружается в адресное- пространство процесса- Вызывать инициализацию, когда тред завершает работу- Вызывать инициализацию, когда тред начинает работу- Вызывать инициализацию, когда DLL завершает свою работу

- ¤ Размер зарезервированного стека: Количество виртуальной памяти, резервируемой для начального стека треда. Тем не менее, не вся эта память выделяется (смотри следующее поле). Это поле по умолчанию равно 0x100000. Если вы укажете 0 в качестве размера стека при создании треда функцией CreateThread, именно столько будет занимать стек нового треда.

- ¤ Размер выделенного стека: Количество памяти, выделяемой для начального стека треда. Это поле по умолчанию равно 0x1000 (1 страница) у Microsoft Linker, в то время как TLINK32 делает это поле равным двум страницам.

- ¤ Размер зарезервированной кучи: Количество виртуальной памяти, которое необходимо зарезервировать для начальной кучи процесса. Этот хэндл кучи можно получить, вызывав GetProcessHeap. Нет вся эта память выделяется (смотри следующее поле).

- ¤ Размер выделенной кучи: Количество памяти, изначально выделяемой для кучи процесса. По умолчанию - одна страница.

- ¤ Флаги загрузчика: Согласно WINNT.H эти поля относятся к поддержке отладки. Я никогда не видел экзешника с установленными битами этого поля, да и как заставить линкер их установить не совсем понятно.

- Вызвать инструкцию точки прерывания перед запуском процесса 2. Вызвать отладчик после того, как процесс будет загружен в память

- ¤ Number Of Rva And Sizes: Количество элементов в массиве DataDirectory (ниже). Современные компиляторы всегда устанавливает это поле равным 16.


<== предыдущая страница | следующая страница ==>
IMAGE_FILE_HEADER | IMAGE_SECTION_HEADER

Дата добавления: 2015-06-30; просмотров: 215; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.