AFAIK さまざまな Linux トレースツールは、さまざまなイベントを記録する /sys/kernel/debug/tracing/events ディレクトリから情報を収集します。 「syscalls」イベントと「raw_syscalls」イベントの違いを説明できる人はいますか?
現在システムから呼び出されているすべてのシステムコールを記録したい場合は、追跡するイベントを特定するためにこの違いを知りたいと思います。 straceやperfトレースなどのツールがあることを知っていますが、独自のツールを作成したいと思います。
答え1
このsyscalls
グループには、特定のシステムコールごとに個別のイベントがあり、そのシステムコールに基づいてパラメータを追跡します。
sys_enter
発生したすべてのシステムコールに対してイベントsys_exit
追跡を実行しraw_syscalls/
ますが、名前ではなくシステムコール番号とパラメータ値のみを表示できます。
strace
同様のツールを実装するのにどちらが適しているかについては、syscalls
システムコールに関する基本情報(システムコール名、パラメータ名、元のパラメータ値など)を簡単に表示できます。
strace
ptrace
ただし、この情報は、プログラムに添付されているツールで入手できる情報に比べて非常に希薄であることに注意してください。syscalls
これは、カーネルがイベント中にシステムコールに渡されたポインタを逆参照しないのに対し、withはプログラムのメモリへのフルアクセス権をptrace
持ち、必要に応じて引数を逆参照できるからです。strace