2013-03-23 4 views

ответ

1

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

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

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

+0

Ну, я запускаю это на 32-битной Windows 7 и используя редактор PE, чтобы увидеть значения. Он показывает точку входа 0x15B8, базовую базу 0x400000 и базу кода 0x1000. Значит ли это, что виртуальный адрес точки входа может быть 0x400000 + 0x1000 + 0x15B8? – Bootstrapper

+0

@ user2104070 - Нет, это будет 0x4015B8 - базовый адрес плюс точка входа. Но, как я уже упоминал, это именно то, что говорит ваш образ, - это * предпочтительный * адрес; Windows может решить загрузить ваш код по другому адресу. – asveikau

+0

Спасибо за исправление. – Bootstrapper