Директива {$IMAGEBASE $13140000} в модуле из расширенной библиотеки перехвата / внедрения: требуется пояснение
Что я сделал до сих пор:
Я нашел его в модуле AfxCodeHook.pas от Aphex.
Я также просмотрел кучу интересных примеров кода, используя его:
- Вставить библиотеку (как внедрить DLL в другой процесс).
- Inject Library Ex (как внедрить DLL в другой процесс, используя метод Ex).
- Создать процесс Ex (как внедрить DLL в созданный процесс, используя метод Ex).
- Inject Executable (истинная сила InjectLibraryEx: возможность внедрения EXE-файлов).
- Простое подключение Api (как использовать afxcodehook для манипулирования вызовами windows apis).
Я также прочитал:
- Запись помощи Embarcadero в RAD Studio
Image base address
а также Base address
страница в Википедии.
Вопрос:
Я ищу обоснованное мнение и простое объяснение директивы {$IMAGEBASE $13140000} в Условиях Layman от опытных программистов Delphi.
1 ответ
Это указывает предпочтительный базовый адрес DLL. Если DLL можно загрузить по этому адресу, загрузчик сделает это. Если это невозможно, то его необходимо переместить и все абсолютные скачки в DLL должны быть скорректированы по новому адресу.
Когда загрузчик пытается отобразить DLL в адресное пространство процесса, он сначала читает предпочтительный базовый адрес. Затем он определяет размер DLL. Наконец, он проверяет, можно ли найти непрерывный блок памяти, простирающийся от базового адреса до базового адреса + размер. Если это так, то DLL загружается по предпочтительному базовому адресу. Если другая DLL или исполняемый файл находятся по предпочтительному базовому адресу, то DLL нужно будет переместить. Если приложение зарезервировало кучную память, которая перекрывается с предпочитаемым адресным пространством загрузки DLL, то DLL нужно будет переместить.
Если необходимо переместить библиотеку DLL, ее физические страницы не могут быть разделены между процессами. Системные библиотеки Windows тщательно выбирают базовые адреса, чтобы гарантировать отсутствие коллизий и возможность их совместного использования.
В настоящее время рандомизация расположения адресного пространства (ASLR) еще более усложняет ситуацию.
Вы можете узнать больше из этих статей: