問題タブ [ptrace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - マルチスレッド、STOPおよびContinue信号を使用したマルチプロセッシング
私はプロジェクトに取り組んでおり、Javaアプリケーションのネイティブスタックを取得する必要があります。私はこれを部分的に達成することができます。ptrace/マルチプロセッシングとシグナルに感謝します。
Linuxでは、通常のJavaアプリケーションには最低14個のスレッドがあります。これらの14のうち、ネイティブスタックを取得する必要があるメインスレッドのみに関心があります。この目的を考慮して、メインスレッドのネイティブスタックを監視するfork()を使用して別のプロセスを開始しました。要するに、私には2つの別々のプロセスがあります。1つは監視されており、もう1つはptraceと信号処理を使用して監視を行います。
監視プロセスのステップ:
1)プロセスから他の14スレッドからメインスレッドIDを取得します。
2)ptrace_attach main_ID
3)ptrace_cont main_ID
連続ループ開始
{{
4)kill(main_ID、SIGSTOP)、
5)nanosleepと/ proc / [pid]/statディレクトリからのステータスの確認
6)スタックを読み取ってナビゲートするptrace_peekdata
7)ptrace_cont main_ID
8)nanosleepと/ proc / [pid]/statディレクトリからのステータスの確認
}
9)ptrace_detach main_ID
これにより、ネイティブスタック情報が継続的に完全に提供されます。しかし、時々私は1つの問題に直面します。
問題:
kill(main_ID、SIGSTOP)をメインスレッドに送信すると、プロセスの他のスレッドが終了または停止状態(T)になり、プロセス全体がブロックされます。これは一貫性のある動作ではなく、プロセス全体が正しく実行されます。メインスレッドに信号を送るだけなので、この動作を理解できませんでした。なぜ他のスレッドが影響を受けるのですか?誰かが問題の分析を手伝ってくれませんか?
また、プロセスのすべてのスレッドでCONTおよびSTOPシグナルを実行しようとしましたが、それでも問題が発生することがあります。
ありがとう、Sandeep
c++ - ptrace を使用してユーザー空間にプログラム スーパーバイザーを書き込む
ファイルシステムやネットワークなどへのアクセスを監視するために、プログラムからのシステム コールをインターセプトできるプログラムを作成するためのアドバイスやリソースを探しています。
これの目的は、信頼できないコードをサーバー上で安全に実行できるように、オンライン ジャッジを作成することです。
これは Linux での作業であり、C++ またはスクリプト言語 (Ruby、Python など) を作成することを好みます。ライブラリがあればすばらしいでしょう!
ありがとう。
signals - ptrace 中にデバッガーでシグナルの詳細を取得するにはどうすればよいですか?
Linux から *bsd に移植するデバッガーがあります。現在、私は OpenBSD バージョンに取り組んでいます。
特定の条件下で、配信された信号の詳細を知りたいです。たとえば、SIGSEGV が配信されたとします。エラーが発生したアドレスは何か、可能であれば、それが読み取りまたは書き込みのどちらであったかを知りたいと思います。
別の例として、トラップを受け取った場合、それはシングル ステップ イベントでしたか? または多分INT3オペコード。
Linux では、次のように呼び出してこの情報を取得します。
これは、信号について知りたい可能性のあるほぼすべてにアクセスできるため、うまく機能します。OpenBSD には同等のものはないようです。kinfo_procKVM API を使用してアクセスできるとを調べましたkinfo_proc2 が、siginfo_t と同じタイプの情報を持っているとは思えません。この情報を入手する正しい方法は何でしょうか?
linux - Linux ptraceが安全でない、または競合状態を含むにはどうすればよいですか?
ptrace()私が開始し、そのすべての子(孫などを含む)が作成するプロセスを実行して、サンドボックスを実装したいと思います。親プロセス、ptrace()つまりスーパーバイザー。単純なCまたはPythonプログラムであり、概念的には、ファイルシステムアクセス(パス名とアクセス方向(読み取りまたは書き込み)およびソケットアクセス(ソケットの作成を禁止するなど)に基づく)を制限します。
ptrace()dプロセスとその子が(再帰的に)サンドボックスをバイパスできないようにするには、何に注意する必要がありますか?fork()競合状態を回避するために監督者がその時に行うべき特別なことはありますか?rename()競合状態なしで子プロセスなどからのファイル名引数を読み取ることは可能ですか?
これが私がすでに計画していることです:
PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONEfork()ingするときに(いくつかの)人種の条件を避けるために- デフォルトですべてのシステムコールを禁止し、許可されたシステムコールのホワイトリストを作成します
*at()システムコールバリアント(などopenat)が適切に保護されていることを確認してください
他に何に注意を払う必要がありますか?
linux - UNIX ptrace()は、子のシステムコールをブロックします
私はプログラミングコンテストの採点者を開発しています。基本的に、採点者は「分離された」プロセスでソリューションプログラムを実行する必要があります。したがって、有害なシステムコール(system()、fork()など)を呼び出さないようにするソリューションが必要です。これを実現するためにptrace()を使用できますか?
c - ptrace を使用して子全体のすべての execve() 呼び出しを追跡する
生成されたすべてのプロセスと実行されているものを追跡するために、Linux CentOS でツールを作成しようとしています。本質的に、私はすべてのフォーク/クローンを歩き回り、からすべてのコマンドラインを発行することに興味がありexecve()ます。Strace はすでにこれ (の一部) を行っていますが、呼び出しと引数も切り詰めています。また、仕組みをよりよく理解したいと思っていましたptrace()。
ptrace()したがって、最初の障害は、トレース プログラムがそれ自体のコピーをフォークする必要なく、フォーク/クローンをウォークする方法を考え出すことでした。私は掘り下げて、straceがこれを行う方法を見つけました。Linux では fork が clone で実装されているため、strace が clone syscall にいくつかのビットをパウンドして、追加の頭痛の種なしに子のトレースを有効にしていることに気付きました。
したがって、本質的に、コードは単なる大きなものです。
これは、 のような比較的単純なプロセスでは正常に機能し/bin/shますが、一部のプロセスでは がwait()無期限にハングする原因となります。私が特定できた唯一のことは、私がトレースしているプロセスがそのsys_rt_sigsuspend()子 (つまり、トレーサーの孫) に対して実行され、それから物事がくさびになっているということです。
何が起こっているのかをデバッグできる健全な方法があるかどうか、私は興味がありました。何かが明らかにプロセス ツリーの進行を妨げている
問題のプログラムのソースコードは次のとおりです。
linux - vsftpd への ptrace 接続がハングする
vsftpdプロセスがシステムコールを行うたびに制御を取得できるように、Linuxでvsftpdサーバープロセスをptraceしようとしています。vsftpd プロセスを開始し、このプロセス ID をコマンド ラインとして、vsftpd をトレースする次のプログラムに渡します。
ただし、次のプログラムを実行すると、ハングして何も印刷されません。何が問題なのか誰か指摘できますか? 助けてくれてありがとう!!
linux - PTRACE_SYSEMU の使用に関する適切なガイドはありますか?
PTRACE_SYSEMUの使用に関する適切な説明、チュートリアル、本、またはガイドはありますか?
c - マルチスレッドアプリケーションをptraceする方法は?
編集(進行中):
vsftpdデーモンをptraceしようとしています。デーモンに接続している次のコードがあります。次に、最初に生成されたプロセスのPIDが正常に表示されます。ただし、この生成されたプロセスの子の場合、PIDは2、3、..として返されます。ただし、プログラムは生成されたプロセスの終了をキャッチします。これにより、私は近くにいると思います。
何か案は?
サンプル出力:
linux - sys_openのptrace%edxが一貫していません
ptraceを使用してsys_openシステムコールからファイル名を取得しようとしています。ファイルパスポインタを取得し、そのアドレスから正しいデータを取得できますが、取得するデータの量、つまりファイル名の長さを知る方法が必要です。この値はedxにあるはずだと思っていましたが、ここではそうではないようです。何かご意見は?
サンプル出力:
ちょうどedx: