Linuxの「トラス-T」および「トラス-U」と同等ですか?


12

LinuxでSolarisユーティリティのオプション-T-Uオプションと同等の機能はありますか?truss

これらは、トレースされたアプリケーションによって呼び出されたときに停止するシステムコール(-T)またはライブラリ関数(-U)を指定することです。

または、別の言い方をすれば、特定のシステム呼び出しまたは特定の共有ライブラリー関数呼び出しを行うとすぐに、トレースされたアプリケーションによって開始されたプロセスを(SIGSTOPによって強制終了されるかのように)停止させたいと思います。

straceおよびltraceLinux上のSolarisの機能セットの多くを提供しtruss、彼らはそれをやっているようには見えません。

例えば:

truss -f -T open cmd

strace -f cmd実行中のプロセスcmdまたはその子孫のいずれかがopenシステムコールを実行した場合、すぐに停止されることを除きます(そして、都合の良いときに後で再開できます)。

いくつかのケースでは、私が使用できるgdbのをcatch syscall、私は便利なフォークに従うと、すべてのフォークのプロセスのためにそれをやって継続した後もそれをやって続けることができます解決策を探していたexecveの。

私は同じ機能を提供するユーティリティを思い出すようです.1つ(またはその同じユーティリティのオプション)でも、そのようないくつかのsyscallのいくつかの発生の間のシングルステップアプリケーションに、そのようなメモリが私に失敗しています、私も確信できませんそれはLinuxでした。


1
実際にはあなたの質問への答えではありませんが、gdbにはフォークを追跡するためのオプションがいくつかあり、execveをキーオフしません。ただし、一度に1つのプロセスしか実行しません。これは、straceのような機能を探している場合、おそらく契約を破る可能性がありますが、念のために言及したいと思いました。
ブラッチリー

@JoelDavis、ありがとう。そして、それはexecの後にも続くようfollow-exec-modeです()、私はそれを実験しています。厳密に質問に答えているわけではありませんが、必要なものには十分かもしれません。
ステファンシャゼラス

あなたの質問を理解したら、特定の信号が表示されるまでトレースする方法を探しています。トレースしているアプリケーションを停止または強制終了するのではなく、トレースを停止します。
slm

@slm、いいえ、特定のシステムコールを行うとすぐに、トレースされたアプリケーションによって開始されたプロセスを(SIGSTOPによって殺されたように)停止する必要があります。Solarisのtrussマンページへのリンクを追加しました。
ステファンシャゼラス

私が正しく理解していることを確認させてください。特定のシステムコールを行うときにプロセスを停止する方法が必要です。あれは正しいですか?
sparticvs

回答:


3

これはで行うことができない、私の知る限りではstraceptrace内部的に使用される機能はありませんSIGSTOPSIGINT呼び出しで。

編集:

この単純なソリューションをministraceに挿入したため、コーディングは不要です。

私が提案した解決策は、straceのすべての機能が必要ではない場合、ministraceを変更することです-ここで見つけました70行のコードでstraceを書いてください

ワンショットプログラムでは、次のコードの前に2行追加できます。

if (wait_for_syscall(child) != 0) break;

擬似コード:

if(syscall == SYS_write)
    do {
        char str[4];
        gets(str);  // waits until enter to continue    
    } while(0);

私はこれを試していないが、これらの最終ステップはあなたに任されている。


ありがとう。それは機能し、そのリンクは非常に便利です。ただし(数行のコードで)、gdb / straceが行う引数のデコードは行わないため、私の目的には役立ちませんでした。ただし、簡単に実行できることがわかります。私は最後にgdbに行きましたが、その機能のstraceをパッチするのは比較的簡単だと思われます。それを行うための既存のコマンドがあると思うので、質問を開いたままにします。時間があるときにpython-ptraceを見ていきます。
ステファンシャゼル

どういたしまして!実装を拡張することで少しワイルドになったので、IDと名前でsyscallを参照することが可能になります。再びptraceで遊ぶのは楽しかったです。
ダニエルW.クロンプトン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.