2012-04-11 2 views
2

私はptraceを使用してデータフロー異常検出を実装しようとしています。少しの研究の後、私はstraceに似たプログラムを実装しました。今、私はウィキのシステムコールについて私に指示するものである、このことについて困惑している:ptraceはユーザーレベルまたはカーネルレベルで機能しますか?

私が使用している場合は

「システムコールは、プロセスとオペレーティングシステム間のインタフェースを提供します」 ptraceを使用してプロセスのメモリを変更するには、私はユーザー空間またはカーネル空間で作業していますか?私は本当にこれについて混乱しています。

答えて

2

あなたは別のプロセスのアドレス空間で作業しています。これは、独立したプロセスが通常は互いのアドレス空間に影響を与えることができないため、カーネルの中断(および許可)を必要とします。

+0

実際、ptraceはシステムコールごとに 'int 0x80'を生成しますか?だから私は割り込みを扱っているので、私はカーネル空間にいるのですか?これが私の最初の考えでした。私は間違っていた? –

+1

正確には、* it *がシステムコールを行うとき(IntelのLinuxでは既にint 0x80)、プロセスのメモリやレジスタを調べるだけでプロセスを停止することはできません。ただし、これらのいずれも、別のプロセスによってプロセスに直接実行することはできません。その2番目のプロセスは代わりに、カーネルに 'ptrace'と同じように最初に動作するように要求する必要があります。 – geekosaur

+0

カーネル空間で直接操作したいのですが、どうすればいいですか? –

関連する問題