Зеркальное отображение виртуальных адресов ядра в симуляторе пользовательского пространства.Linux

Ответить
Anonymous
 Зеркальное отображение виртуальных адресов ядра в симуляторе пользовательского пространства.

Сообщение Anonymous »

Я разрабатываю симулятор пользовательского пространства, предназначенный для создания трассировок выполнения, идентичных тем, которые генерируются при запуске программы внутри ядра.
Программа работает в небольшой изолированной области памяти. Проблема в том, что когда программа выполняется в ядре, виртуальный адрес песочницы находится в пространстве ядра. Однако в симуляторе пользовательского пространства память песочницы выделяется с помощью malloc, и поэтому ее базовый адрес естественным образом находится в пользовательском пространстве.
Это несоответствие приводит к несогласованности, поскольку базовый адрес песочницы распространяется на состояние выполнения программы и может влиять на решения потока управления. В результате трассировка выполнения, созданная в пространстве пользователя, может отличаться от трассировки, созданной в пространстве ядра.
Например, рассмотрим следующий код AArch64, где регистр x29 содержит базовый адрес песочницы:

Код: Выделить всё

mov x1, #10          // Access offset 10 inside the sandbox
add x1, x1, x29      // Add the sandbox base address
str x1, [x1]         // Store the computed address
ldr x2, [x1]         // Load it back into x2
На этом этапе x2 содержит значение, полученное из базового адреса песочницы. Поэтому любое последующее вычисление или ветвление в зависимости от x2 будет зависеть от базового виртуального адреса песочницы.
Если x29 различается при выполнении ядра и пользовательского пространства, поведение программы может отличаться, что приводит к неточным результатам трассировки.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -simulator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»