Я изучаю исполняемый файл Windows с «PE Editor», который отображает точку входа как 0x15B8, как мы определяем адрес этой точки входа как виртуальный адрес?Виртуальный адрес точки входа в систему Windows PE
ответ
Точка входа сохраняется относительно адреса загрузки модуля.
Модуль может указать предпочтительный адрес, установив поле ImageBase
в поле IMAGE_OPTIONAL_HEADER
(см. this page). Однако ОС может выбирать другой адрес, потому что предпочтительный адрес используется, или, в наши дни, из-за ASLR.
Я не уверен, в какой среде вы работаете, но если вы делаете это с помощью живой программы: это деталь реализации, но на NT вы можете вставить HMODULE
в указатель, и это адрес загрузки модуля. На этом вы также можете прочитать заголовки PE. Например, вы можете добавить участника AddressOfEntryPoint
на адрес HMODULE
и найти точку входа ... Если вам нужна информация о времени загрузки, вам нужно сделать что-то вроде смещения байта в файл, вам придется проанализировать чтобы найти, где находится файл.
Ну, я запускаю это на 32-битной Windows 7 и используя редактор PE, чтобы увидеть значения. Он показывает точку входа 0x15B8, базовую базу 0x400000 и базу кода 0x1000. Значит ли это, что виртуальный адрес точки входа может быть 0x400000 + 0x1000 + 0x15B8? – Bootstrapper
@ user2104070 - Нет, это будет 0x4015B8 - базовый адрес плюс точка входа. Но, как я уже упоминал, это именно то, что говорит ваш образ, - это * предпочтительный * адрес; Windows может решить загрузить ваш код по другому адресу. – asveikau
Спасибо за исправление. – Bootstrapper