ルートシェルでシステムコールがトリガーされるタイミングを監視する方法は?

ルートシェルでシステムコールがトリガーされるタイミングを監視する方法は?

システムコールがトリガーされるタイミングを監視して、組み込みデバイスをデバッグしようとしています。現時点では、デバイスにルートシェルが接続されています。コマンドを実行すると$ top実行可能ファイルが実行されていることがわかりますが、/system/bin/mainこのファイル内には複数のioctl呼び出しがあります。私が望むのは、これらのシステムコールが実際にリアルタイムで実行されたときに「通知」を受信または監視することです。たとえば、カメラに要求を送信してioctl呼び出しを実行できることを知っていますが、ルートシェルでこれを表示する方法はわかりません。このファイルではioctlのみを使用します。

ベストアンサー1

まさにこれを行うユーティリティがありますstrace:プログラムに接続し、システムコールを表示します。このように使用できますが、strace <program>通常のプログラム出力と混在して邪魔になります。より良いアプローチ(ルートアクセスが必要ですが)は、まずプログラムを実行してからpgrep <program>PIDを取得するか、手動で検索してtopから別のシェルでrootとして実行することですstrace -p <pid>。その後、そこからgrepし、ベルを通ってパイプまたはioctl()エコーして毎回通知を受け取ることができます。また、(コメントは@aviroに提供)に渡してトレースを実行でき、引数を追加すると、生成されたすべてのサブプロセスも追跡できます。完全なコマンドは次のとおりです。notify-sendxargsioctl()-e trace=ioctlstrace-f

strace -f -e trace=ioctl -p <pid> &>&1 | tee ioctl.log | tee >(xargs -L1 echo -e \b)

ioctl を標準出力に簡単に印刷するには、最後のコマンドを省略します。優先通知コンストラクタまたは新しいioctlが発生するたびに呼び出される他の通知コンストラクタecho -e \bに置き換えます。notify-send

おすすめ記事