システムコールがトリガーされるタイミングを監視して、組み込みデバイスをデバッグしようとしています。現時点では、デバイスにルートシェルが接続されています。コマンドを実行すると$ top
実行可能ファイルが実行されていることがわかりますが、/system/bin/main
このファイル内には複数のioctl呼び出しがあります。私が望むのは、これらのシステムコールが実際にリアルタイムで実行されたときに「通知」を受信または監視することです。たとえば、カメラに要求を送信してioctl呼び出しを実行できることを知っていますが、ルートシェルでこれを表示する方法はわかりません。このファイルではioctlのみを使用します。
ベストアンサー1
まさにこれを行うユーティリティがありますstrace
:プログラムに接続し、システムコールを表示します。このように使用できますが、strace <program>
通常のプログラム出力と混在して邪魔になります。より良いアプローチ(ルートアクセスが必要ですが)は、まずプログラムを実行してからpgrep <program>
PIDを取得するか、手動で検索してtop
から別のシェルでrootとして実行することですstrace -p <pid>
。その後、そこからgrepし、ベルを通ってパイプまたはioctl()
エコーして毎回通知を受け取ることができます。また、(コメントは@aviroに提供)に渡してトレースを実行でき、引数を追加すると、生成されたすべてのサブプロセスも追跡できます。完全なコマンドは次のとおりです。notify-send
xargs
ioctl()
-e trace=ioctl
strace
-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