ImageBase + SizeOfHeaders будет переходить к разделу таблицы - PullRequest
1 голос
/ 06 марта 2012

Я читал учебник по PE, и он говорит:

Перейти к таблице разделов, добавив ImageBase к SizeOfHeaders

, но SizeOfHeaders -

Размер всех заголовков + таблица разделов

, поэтому, если мы добавим SizeOfHeaders в ImageBase, не перейдем ли мы к разделам, а не к таблице?

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

SizeOfHeaders не используется для определения положения таблицы разделов, даже если они могут совпадать в некоторых файлах (но я этого не ожидаю).

Вот как это делается в Windowsзаголовки (и, следовательно, системный загрузчик):

#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER)        \
    ((ULONG_PTR)(ntheader) +                                            \
     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 \
     ((ntheader))->FileHeader.SizeOfOptionalHeader   \
    ))

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

См. здесь для получения дополнительной информации и еще более неприятных уловок.

1 голос
/ 06 марта 2012

SizeOfHeaders действительно является размером всего заголовка, включая заглушку DOS.

Чтобы получить адрес таблицы разделов, сначала получите адрес необязательного заголовка и добавьте FileHeader.SizeOfOptionalHeader.

...