問題タブ [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.
linux - シグナルの送信者を検出する (linux、ptrace)
プロセスに直接配信されたシグナルとデバッガー経由で配信されたシグナルを区別できますか?
ケース 1:
ケース 2:
では、デバッガーによって再配信されたのか、システムによって送信されたのか、シグナルハンドラーでどのように検出できますか?
OSはLinux、カーネルは2.6.30。プログラムはプレーンな C で書かれています。実際のプログラムでは SIGALRM が使用されますが、それは ではなく で生成されalarm()
ますsetitimer()
。
c++ - Linux で Ptrace を使用して C++ の他のプロセスのコール スタックを出力する方法
Linux で実行中のすべてのプロセスのコール スタックを必要とするアプリケーションに取り組んでいます。ptrace を使用しようとしていますが、コードで実行する必要がある手順が明確でないため、先に進むことができません。
バックトレースも試しましたが、その使用は現在のプロセスに制限されています。
誰かが私を同じように案内してくれませんか。
ありがとう、サンディープ
linux - How can we get Function name from Spack Pointer(reg/SP) on Linux?
i am using ptrace to get information related to Callstack on Linux. i can retrieve Spack Pointer to my stack using register returned by ptarces. but using this stack pointer how can i retrieve information related to Function name and signature of current call stack?
are there any Linux APIs to traverse this callstack?
please help.. i am looking for it from last few days...
thanks in advance Sandeep
c - ptrace を使用してスタック ダンプを生成する
*nix で C++ をコンパイルしていますが、a) プログラムの任意の時点で、b) シグナル中、特に SIGSEGV 中にスタック ダンプを生成したいと考えています。
Google は、おそらく ptrace がその仕事のためのツールであると言っていますが、スタックをたどるわかりやすい例を見つけることができません。返信先住所を取得することはできますが、次の返信先住所はどうでしょうか。そして、その時点で関数のシンボリック名を抽出するのはどうですか? ドワーフと関係ある?
ここからどこに行くべきか教えていただければ、どうもありがとうございます。
linux - 外部プログラムでSIGSEGVを引き起こす命令のアドレス
SIGSEGVに外部プログラムを引き起こす命令のアドレスを取得したい。これにptraceを使用しようとしましたが、カーネルスペースからEIPを取得しています(おそらくデフォルトのシグナルハンドラーですか?)。GDBはどのようにして正しいEIPを取得できますか?
APIを使用してGDBにこの情報を提供させる方法はありますか?
編集:私はプログラムのソースを持っていません、バイナリ実行可能ファイルだけを持っています。自動化が必要なので、GDBで「実行」や「情報レジスタ」を単純に使用することはできません。自分のミニデバッガに「情報レジスタ」を実装したい:)
c - ptrace を使用した Linux でのスタック ウォーク
以下は私の要件です。
プロセスAの実行中。
- PTRACE_ATTACH を使用して B からプロセス A をアタッチします。
- ループを開始する
- プロセス A を停止
- レジスターの読み取り
- プロセス A の再開
- スリープ(1)
- エンドループ
- Aを切り離す
ループからプロセス A を開始して再開するという問題に直面しています。kill(pid、SIGSTOP)、kill(pid、SIGCONT)、PTRACE_CONTの組み合わせを試しました。しかし、うまくいきませんでした。
他の解決策はありますか?
前もって感謝します。サンディープ
ptrace - 64 ビット Linux でのプログラム/命令ポインター (RIP) とベース/フレーム ポインター (RBP) の関係
Linux 64 ビットマシンでコール スタックの命令ポインタ ( RIP ) を取得する際に助けが必要です。ptrace を使用してスタックを走査し、すべてのフレーム/ベース ポインター ( RBP ) 値を取得できます。しかし、IP値が欲しいので、RIPとRBPの間の算術的および概念的な関係は何ですか. RIP 値が (RBP + 8) の場所に格納されており、ptrace PEEKDATA を使用して読み取ることができると仮定します。私の仮定は正しいですか?
ptrace - struct reg と struct user_regs_struc の違いは?
Linux 64 ビット マシンでのstruct regとstruct user_regs_strucの違いは何ですか?
c - HP-UX での PTRACE プログラミング
HP-UX で ptrace を使用してプログラミングする方法に関する情報を入手できるリンクを教えてください。
Linux ptraceのリンクを投稿しないでください。
linux - ptrace'ing マルチスレッド アプリケーション
という名前の「デバッガー」のようなアプリケーションがありますhyper-ptrace
。user_appl3
NPTLでマルチスレッド化されたものから始まります。
hyper-ptrace のメイン ループは次のとおりです。
SIGTRAP は、ハードウェアによってスレッドごとに一定の間隔で user_appl3 に対して生成され、一部のスレッドに配信されます。間隔は 100..1 ミリ秒以下にすることができます。これは、割り込みを伴う一種の CPU ごとのクロックです。各スレッドは、その CPU のみで実行されます (アフィニティーでバインドされます)。
だから質問があります1 :
スレッド 1が TRAP を取得し、デバッガーが に入りdo_some_analysis_of_the_child
(デバッガーが 2 番目のスレッドを実行しないwait3
)、しばらくしてスレッド 2 も TRAP を取得した場合、Linux カーネルはどうしますか?
私の意見では、シグナルを受信し、待機中のデバッガーがあるため、thread1 は停止します。しかし、thread2 は引き続き実行されます (そうですか? )。スレッド 2 がシグナルを受け取ると、待機中のデバッガーがないため、TRAP をスレッド 2 自体に配信して、効果的にスレッドを強制終了できます。私は正しいですか?
そして、2 番目の質問 question2 があります。
この場合、デバッガーを介してユーザーのスレッドにシグナルを送信する可能性を下げるために、メイン ループをどのように書き直せばよいでしょうか? トラップを生成するハードウェアも、ユーザー アプリケーションも変更できません。2 番目のスレッドを停止することも変種ではありません。hyper-ptrace
両方のスレッドを分析する必要があります。一部の部分は、スレッドが停止している場合にのみ実行できます。
前もって感謝します!