PE-файл в большинстве случаев использует относительную виртуальную адресацию (RVA). Однако иногда используется абсолютная адресация в виртуальном адресном пространстве. Затем эти адреса обрабатываются с помощью таблицы перемещений. В каких случаях и для чего используется абсолютная адресация внутри виртуального адресного пространства в файле?
Нельзя ли это сделать через RVA?
Какую mov инструкцию вы бы предложили?
Действительно. Я проверил инструкцию mov для переменной, она использует абсолютную адресацию. Получается, что использование абсолютной или относительной адресации определяется архитектурой процессора? (ЭТО)
RVA не означает относительную виртуальную адресацию. Просто относительный виртуальный адрес.





Абсолютная адресация в виртуальном адресном пространстве используется в PE-файлах, когда исполняемый код должен ссылаться на внешние библиотеки или системные функции, загружаемые по фиксированному адресу памяти в адресном пространстве процесса. Это связано с тем, что абсолютный адрес этих библиотек или функций не может быть известен во время компиляции и, следовательно, должен быть разрешен во время выполнения.
В этих случаях PE-файл будет включать таблицу перемещений, в которой перечислены абсолютные адреса, которые необходимо изменить во время выполнения. Когда исполняемый файл загружается в память, загрузчик операционной системы определяет базовый адрес процесса и использует эту информацию для настройки абсолютных адресов, перечисленных в таблице перемещений, на их новые значения во время выполнения. Этот процесс известен как «переселение».
Причиной использования абсолютной адресации в этих случаях является повышение производительности. Используя абсолютную адресацию, исполняемый файл может напрямую ссылаться на адреса памяти системных функций или библиотек без необходимости вычислять смещение от базового адреса, что потребовало бы дополнительного времени обработки. Это особенно важно для критически важного для производительности кода, такого как системные библиотеки или драйверы устройств.
Однако использование абсолютной адресации может также привести к уязвимостям безопасности, таким как атаки переполнения буфера, если таблица перемещения не защищена должным образом. Чтобы снизить эти риски, современные операционные системы используют различные методы, такие как рандомизация структуры адресного пространства (ASLR), чтобы рандомизировать базовый адрес процесса и затруднить использование злоумышленниками этих уязвимостей.
Как еще код будет ссылаться на данные, хранящиеся в PE-образе?