Виртуальный адрес, назначенный импортированной функции - PullRequest
0 голосов
/ 25 апреля 2018

Рассмотрим инструкцию типа CALL DWORD PTR 44244100, которая импортирует и использует функцию DLL в программе сборки. Мы знаем, что адрес, используемый инструкцией, является относительным виртуальным адресом (RVA).

1.Почему я достигаю другого значения VA в поле значения Thunk программного обеспечения LordPE, когда отслеживаю этот фрагмент кода по нему?

2.Есть ли DLL, такие как User32 или Kernel32, всегда загружаются на определенном виртуальном устройстве или не обязательно? Если нет, то как Loader распознает, к какой DLL принадлежит указанный выше адрес? путем поиска в таблице имен ?! Я имею в виду, что этот адрес является инвариантным, поэтому, если местоположение загруженной библиотеки DLL также является фиксированным, то для этого адреса сначала должен быть назначен другой виртуальный компьютер.

Спасибо всем.

1 Ответ

0 голосов
/ 25 апреля 2018

Я не понимаю первый вопрос. Если вы имеете в виду thunk, что касается импорта функций, то это не RVA, это плоские адреса. Также адрес, используемый инструкцией в случае адресации кода, всегда относительно текущего значения указателя инструкции. RVA используются только загрузчиком (и такими функциями, как LoadLibrary, GetProcAddr и т. Д.). Я думаю. x86 Процессор не знает концепции RVA , это точно. Может быть, вы знали это, мне было не очень понятно, если это так, извините за чтение лекций. Вопрос второй! Нет! Это не исправлено! Загрузчик фактически просматривает таблицу импорта вашего exe-файла и заполняет заполнители. Фиксированные адреса загрузки больше не нужны, так как Windows XP SP3. Надеюсь это поможет. Если нет, это помогло мне, когда я был маленьким картофелем https://msdn.microsoft.com/en-us/library/ms809762.aspx

...