Программа работает в небольшой изолированной области памяти. Проблема в том, что когда программа выполняется в ядре, виртуальный адрес песочницы находится в пространстве ядра. Однако в симуляторе пользовательского пространства память песочницы выделяется с помощью 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
Если x29 различается при выполнении ядра и пользовательского пространства, поведение программы может отличаться, что приводит к неточным результатам трассировки.
Подробнее здесь: https://stackoverflow.com/questions/798 ... -simulator
Мобильная версия