Могут ли функции ядра иметь разные виртуальные адреса - PullRequest
1 голос
/ 20 октября 2011

Это больше похоже на вопрос знаний, чем на фактическую реализацию. Мне было интересно, может ли какая-либо функция ядра иметь разные виртуальные адреса после запуска системы. Мое понимание компиляции для исполняемого файла состоит в том, что виртуальные адреса назначаются для его двоичного файла, но виртуальное к физическому выполняется во время выполнения с помощью os. Но в случае функций ядра, я вижу, что они имеют разные виртуальные адреса при каждом перезапуске системы. 1. Как функции ядра отображаются в диапазоне адресов? 2. Могут ли они быть сопоставлены с различными виртуальными адресами во время выполнения. (Интересно, как это возможно) 3. Как происходит сопоставление адресов для dll? Им дают виртуальный адрес при компиляции или относительный адрес во время выполнения? (Я думаю, что так оно и есть.) 4. Есть ли способ узнать, прикреплен ли какой-либо виртуальный адрес ядра к физической памяти.

Спасибо

Ответы [ 2 ]

4 голосов
/ 20 октября 2011

Традиционно исполняемым файлам назначается фиксированное сопоставление виртуальных адресов во время компиляции. Однако в последние годы стало очевидно, что это плохо для безопасности - злоумышленники могут использовать свои знания о том, где именно находится память, как часть эксплойта. Чтобы помочь смягчить это, можно использовать независимые от позиции или перемещаемые исполняемые файлы, чтобы адрес загрузки был рандомизирован (по крайней мере, в Linux). Однако это связано с недостатком - запуск программы занимает больше времени, так как динамический загрузчик должен выполнять перемещения (либо это, либо есть дополнительные издержки во время выполнения из независимого от позиции машинного кода).

Для ядра ОС дополнительные издержки тривиальны по сравнению с остальной частью времени, затрачиваемого на загрузку; действительно, ядро ​​Windows фактически динамически связывает многие из его компонентов. Таким образом, ядро ​​является очевидным местом для рандомизации адреса загрузки.

1 голос
/ 21 октября 2011
  1. Как функции ядра отображаются в диапазоне адресов?

Они вовсе не обязательно отображаются в пространстве пользователя.До тех пор, пока я не прекратил практиковать в этой области, они достигли мягких прерываний.

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