2012-04-11 2 views
2

Я пытаюсь реализовать обнаружение аномалии потока данных с помощью ptrace. После небольшого исследования я реализовал программу, похожую на strace. Теперь, я запутался об этом, и это то, что Вики говорит мне о системных вызовах:Работает ли ptrace на уровне пользователя или на уровне ядра?

«Системные вызовы обеспечивают интерфейс между процессом и операционной системы»

Когда я использую ptrace, чтобы изменить память процесса, я работаю над пользовательским пространством или пространством ядра? Я действительно смущен этим.

ответ

2

Ты работаешь в адресном пространстве для отдельного процесса; для этого требуется вмешательство (и разрешение) ядра, поскольку независимые процессы не могут нормально влиять на адресные пространства друг друга.

+0

На самом деле ptrace будет генерировать 'int 0x80' для каждого системного вызова? Итак, я имею дело с прерыванием, поэтому я нахожусь в пространстве ядра правильно? Это была моя первая мысль. Был ли я неправ? –

+1

Не совсем, он может остановить процесс, когда * он * делает системный вызов (который уже является «int 0x80» для Linux на Intel), но он также может просто проверять память процесса или регистры. Однако любое из этих действий не может быть непосредственно связано с процессом другим процессом; этот второй процесс должен вместо этого попросить ядро ​​действовать на первом, что и делает 'ptrace'. – geekosaur

+0

Итак, если я хочу работать непосредственно в пространстве ядра, что мне делать? –

Смежные вопросы