問題タブ [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.
c++ - 読み取り/書き込みを監視するプログラム プログラムの PATH は?
私は大学のプロジェクト用のプログラムを作成しようとしていましたが、これで行き詰まりました:
プログラムがどのファイルに書き込み、またはどのファイルから読み取るかについて、プログラムをどのように監視しますか? 私は彼らのパス名を知りたいです。
問題をより明確にするために、以下に例を示します。
監視するプログラムが a.exe であるとします。a.exe はまず a.exe と同じフォルダーにある「a1」という名前のファイルを開き、次に「a2」という名前の別のファイルを開きます。
プログラムは、読み取り/書き込み用に開いているかどうかに関係なく、「a1」および「a2」ファイルの相対パスまたは絶対パスを指定する必要があります。
これを C++ で実装するにはどうすればよいですか?
編集: a1 および a2 ファイルの呼び出しを別のパスに転送することは可能ですか?? EDIT2:わかりました、このように言いましょう:firefox.exeをC:\プログラムファイルからD:\に移動しました。現在、firefox.exeを実行すると、Cにある多くのファイルで動作するので動作しません:\program files の場合、firefox.exe はファイルへのアクセスに相対パスを使用します。私がやろうとしているのは、firefox.exe が動作するファイルの呼び出しをキャプチャし、その呼び出しをプログラム ファイル フォルダーに転送することです。私が自分自身を明確にしたかどうか教えてください..
objective-c - ptrace 関数の名前を別の名前に変更しますか? どのように?
コードでは、私は使用します
#include <sys/types.h>
#include <sys/ptrace.h>
ptrace(PT_DENY_ATTACH, 0, 0, 0);
プロセスへのアタッチを拒否します。「ptrace()」の名前をあまり明白でない名前に変更する方法があるかどうか疑問に思っていました。ptrace.h を自分のヘッダー ファイルにコピーして、int ptrace を別のものに変更しようとしましたが、未定義のシンボル エラーで失敗しました。そして、関数への他の参照が見つかりません:\
これについて何かを事前に感謝します。
c - ptrace でプログラムの実行を追跡する方法は?
システム コール「ptrace」(PTRACE_SINGLESTEP マクロを使用) を使用して、単純なアプリケーションの実行を追跡しようとしています。
プログラムの実行を記録している間、読み取りの無駄な部分をスキップして、アプリケーションの「メイン」からのみフォローしたいと思います。トレーサーを起動するたびに、約 100k の実行ステップが発生するためです。
心のこもった
c - pt_regsとuser_struct_regsの違い
私は最近ptraceとレジスターをいじり回していて、コンテンツに関してはpt_regsとuser_struct_regsに違いがあるのではないかと思っていました。具体的には、どちらも同じコンテンツ(レジスタ値)を保持していますが、保持する名前の付いたメンバーが異なるだけですか。
一部のアーキテクチャにはuser_struct_regsが含まれていますが、armなどの他のアーキテクチャには含まれていないことに気付きました。
strace - strace/ltrace が一貫性のない情報を出力する
strace pwd
:
ltrace pwd
:
第 1 パラメータがNULL
にあるのはなぜltrace
ですか?
strace/ltrace はどちらもシステムコールを使用してptrace
いるようですが、なぜ異なる情報を取得するのでしょうか?
c - 開始時に子プロセスを停止する
プロセスをチェックポイントするチェックポイント機能を実装しようとしています。子プロセスをフォークすることでそれを行います。ただし、開始時に子プロセスを一時停止する必要があります。後で、子プロセスの一時停止を解除し、親プロセス自体を強制終了させることで、チェックポイントから再開できます。
これが私が書いたコードとcheckpoint
、restart_from_checkpoint
それらを呼び出す方法の例です。
を呼び出した後に子プロセスを停止する方法がわかりませんptrace(PTRACE_TRACEME,0,0,0)
。第二に、子プロセスを継続させながら親プロセスを強制終了する方法がわかりませんrestart_from_checkpoint
。
ptrace
最良の方法は、フォークされたプロセスを最初に停止し、後で で開始するパラメータを使用する可能性ですPTRACE_CONT
。残念ながら、PTRACE_TRACEME はexec
関数呼び出しでしか停止しません。
c - solaris の ptrace
ptrace
Linux から Solaris に使用するプログラムを移植しようとしていますが、うまくいきsys/ptrace.h
ません。それを移植する方法はありますか?
elf - ELF x86 実行可能エントリ ポイント
ここで、debuggedfile は、int エントリ ポイントがあるオフセットにある elf ファイルへのストリームです。ptrace(PTRACE_PEEKTEXT, 0, entrypoint, 0) を使用すると、-1 が返されます
c - ptrace を使用して複数のスレッドの CPU レジスタを取得および設定する
別の監視プロセスの監視下でマルチスレッド アプリケーションを実行することに関心があります。監視プロセスは、監視対象アプリケーションのすべてのスレッドの CPU レジスタを取得および設定できる必要があります。シングルスレッドアプリケーションでこれを行う方法を知っています。しかし、これをマルチスレッド アプリケーション用に拡張する方法を知りたいと思っています。
linux - ptrace のみを使用して「バックトレース」(gdb など) を取得する方法 (Linux、x86/x86_64)
backtrace
gdb のように出力を取得したい。ptrace()
しかし、私は直接これをやりたいです。私のプラットフォームは Linux、x86 です。そして、それ以降は x86_64 です。
ここで、シンボル名に変換せずに、スタックからリターン アドレスのみを読み取りたいと考えています。
したがって、テストプログラムの場合、次の-O0
モードでコンパイルされgcc-4.5
ます。
私は自分のプログラムを開始し、ptrace
最初にプログラムをテストするために接続します。次に、PTRACE_CONT を実行し、シグナルを待ちます。テスト プログラムが自己停止を行う場合。信号は私のプログラムに配信されます。この時点でリターン アドレスを読みたいと思いますが、次のようになります (kill
機能が現在アクティブであるため)。
で現在停止しているテスト プロセスのリターン アドレスを見つけるにはどうすればよいptrace
ですか? フレームにループが発生しますか? そのようなループをいつ停止する必要がありますか?
PS: はい、これも考え方がbacktrace(3)
libc 関数に非常に似ていますが、ptrace を介して外部でこれを実行したいと考えています。