システムコールとraw_syscallsイベントの違いは何ですか?

システムコールとraw_syscallsイベントの違いは何ですか?

AFAIK さまざまな Linux トレースツールは、さまざまなイベントを記録する /sys/kernel/debug/tracing/events ディレクトリから情報を収集します。 「syscalls」イベントと「raw_syscalls」イベントの違いを説明できる人はいますか?

現在システムから呼び出されているすべてのシステムコールを記録したい場合は、追跡するイベントを特定するためにこの違いを知りたいと思います。 straceやperfトレースなどのツールがあることを知っていますが、独自のツールを作成したいと思います。

答え1

このsyscallsグループには、特定のシステムコールごとに個別のイベントがあり、そのシステムコールに基づいてパラメータを追跡します。

sys_enter発生したすべてのシステムコールに対してイベントsys_exit追跡を実行しraw_syscalls/ますが、名前ではなくシステムコール番号とパラメータ値のみを表示できます。

strace同様のツールを実装するのにどちらが適しているかについては、syscallsシステムコールに関する基本情報(システムコール名、パラメータ名、元のパラメータ値など)を簡単に表示できます。

straceptraceただし、この情報は、プログラムに添付されているツールで入手できる情報に比べて非常に希薄であることに注意してください。syscallsこれは、カーネルがイベント中にシステムコールに渡されたポインタを逆参照しないのに対し、withはプログラムのメモリへのフルアクセス権をptrace持ち、必要に応じて引数を逆参照できるからです。strace

関連情報