Переписывает ли загрузчик абсолютные адреса в машинный код? - PullRequest
0 голосов
/ 06 августа 2020

Допустим, у меня есть следующее:

прив. База изображений 0x40000 и тот факт, что используется ASLR.

я прав, если говорю, что перевод будет выполняться следующим образом: изменить порядок байтов при загрузке?

1 Ответ

1 голос
/ 06 августа 2020

В 32-битных Windows всех DLL файлах и многих (но не всех) EXE файлах есть так называемая «Базовая таблица перемещения».

Эта таблица содержит список всех абсолютные адреса, содержащиеся в файле.

В вашем примере есть абсолютный адрес (0x006C0064), хранящийся по адресу 0x00042333.

Таблица будет содержать запись о том, что существует абсолютный адрес, хранящийся в 0x00042333.

Когда исполняемый файл или динамическая c библиотека загружается по другому адресу, загрузчик действительно «перезапишет» все эти адреса.

Однако, «перезапись» - довольно простая операция: нужно просто добавить фиксированное значение ко всем этим адресам.

Обратите внимание, что эта концепция полностью отличается от концепции, используемой Linux и другими ОС.

...