Linux 64 ビットマシンでコール スタックの命令ポインタ ( RIP ) を取得する際に助けが必要です。ptrace を使用してスタックを走査し、すべてのフレーム/ベース ポインター ( RBP ) 値を取得できます。しかし、IP値が欲しいので、RIPとRBPの間の算術的および概念的な関係は何ですか. RIP 値が (RBP + 8) の場所に格納されており、ptrace PEEKDATA を使用して読み取ることができると仮定します。私の仮定は正しいですか?
2934 次
1 に答える
2
スタックにプッシュされた戻りアドレスは、現在実行中の関数で%rip
はなく、現在実行中の関数が戻った後の開始のみを取得します%rip
。%rip
GDB と同じ方法で現在の情報を取得できるはずです。
- プラットフォームが
PTRACE_GETREGS
orPTRACE_GETREGSET
引数をサポートしているのが理想的です。あなたのマンページとヘッダーファイルは、ここからの残りの方法を取得する必要があります. PTRACE_PEEKUSER
それができない場合は、適切なオフセットで引数を使用して、ユーザー領域からレジスタを取得できるはずです。
gdb/amd64-linux-nat.c
GDB ソース ツリーで詳細を確認できます。
于 2010-07-10T15:07:15.800 に答える