2015-11-15 6 views
6

ВРасчет файлового смещения точки входа в PE файл

http://en.redinskala.com/finding-the-ep/

есть информация о том, как найти файловое смещение точки входа в EXE-файл.

Здесь я могу прочитать, что

EP (Файл) = AddressOfEntryPoint - BaseOfCode + .text [PointerToRawData] + FileAlignment

Однако, когда я вычислял это сам (я использовал несколько разных exe-файлов). Я пришел к выводу, что

Смещение точки входа в EXE-файл = AddressOfEntryPoint + .text [Pointe rToRawData] - .text [VirtualAddress]

Где AddressOfEntryPoint извлекается из IMAGE_OPTIONAL_HEADER и двух других значений из IMAGE_SECTION_HEADER.

Является ли информация на этой веб-странице ложной? Добавление FileAlignment, как будто они кажутся неправильными, это не имеет смысла. Или это? Выравнивание файла предполагает, что я должен использовать modulo или что-то, чтобы вычислить значение. Если BaseOfCode и FileAlignment имеют одинаковое значение (в основном это они), это не помешает их добавить к вычислению, но как это будет иметь смысл?

+0

Мне пришлось бы перечитать спецификацию PE, но добавление выравнивания файлов кажется действительно неправильным. Если неуравновешенное смещение - 'x', я бы пошел на' x - x% FileAlignment'. –

ответ

2

Правильно, вам не нужно использовать значение FileAlignment.

Алгоритм должен быть чем-то вроде как следуют (очень похоже на ваш):

  • Получить AddressOfEntryPoint от IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint (это VA)
  • Поиск в котором секция заголовка этой VA проживает (как правило, 1-й, но вы должны действительно искать во всех заголовках разделов).
  • Как только у вас есть правый заголовок раздела, получите его поля VirtualAddress и PointerToRawData.
  • Вычесть VirtualAddressAddressOfEntryPoint из: теперь у вас есть «дельта»
  • Как в точности то же относится и к дельта смещение, то: добавить «дельту» в PointerToRawData.

Вам просто не нужен FileAlignment, потому что раздел, в котором находится точка входа, уже выровнен по этому значению.

 Смежные вопросы

  • Нет связанных вопросов^_^