Windows PE определяет виртуальный адрес точки входа

Я проверяю исполняемый файл Windows с "PE Editor", который отображает точку входа как 0x15B8. Как определить адрес этой точки входа как виртуальный адрес?

1 ответ

Решение

Точка входа сохраняется относительно адреса загрузки модуля.

Модуль может указать свой предпочтительный адрес, установив ImageBase поле в IMAGE_OPTIONAL_HEADER (см. эту страницу). Однако ОС может свободно выбирать другой адрес, либо потому, что используется предпочтительный адрес, либо, в наши дни, из-за ASLR.

Я не уверен, в какой среде вы запускаете это, но если вы делаете это с работающей программой: это деталь реализации, но в NT вы можете использовать HMODULE в указатель, и это адрес загрузки модуля. Вы также можете прочитать PE заголовки на основе этого. Так, например, вы можете добавить AddressOfEntryPoint член по адресу HMODULE и найти точку входа... Если вместо того, чтобы загружать информацию о времени, вам нужно что-то вроде смещения в байтах в файле, вам придется проанализировать заголовки разделов, чтобы найти, куда в файле они попадают.

Другие вопросы по тегам