Какова цель перемещения при использовании витруальной памяти? - PullRequest
0 голосов
/ 10 апреля 2020

Я понимаю, что такое перемещение и виртуальная память. Однако я не могу понять, почему современные ОС не смогут загрузить программу по ее предпочтительному адресу, если предпочтительным является виртуальная память. Разве перемещение не требуется для операционных систем, способных отображать одну и ту же виртуальную память на разные физические адреса?

1 Ответ

0 голосов
/ 12 апреля 2020

Первая причина для общих объектов. Если общие объекты не могли «запускаться из любого места», то сопоставление их с данным процессом может завершиться неудачей, если нужные адреса уже используются.

Вторая причина - нарушить предсказуемость выполнения программ; запуская программу со случайно выбранного адреса каждый раз, когда она запускается, вредоносные программы, нацеленные на программу, должны работать усерднее, чтобы сделать полезные эксплойты.

Третичная причина в том, что это легко, особенно с ARM и архитектурами amd64 , Эти арки избегают "mov% rax, <64bit-address>", в пользу "lea% rax, symbol (% rip)" или "mov% rax, symbol@GOTPCREL (% rip)". В первом случае адрес относится к счетчику программ; в первом GOT, содержащий адрес, относится к счетчику программ. Загрузчик (в ядре, а не команда ld), таким образом, должен только переписать GOT.

Это более громоздко в архитектуре i386, поскольку имеет слабую p c -относительную модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...