2

Linux 64 ビットマシンでコール スタックの命令ポインタ ( RIP ) を取得する際に助けが必要です。ptrace を使用してスタックを走査し、すべてのフレーム/ベース ポインター ( RBP ) 値を取得できます。しかし、IP値が欲しいので、RIPとRBPの間の算術的および概念的な関係は何ですか. RIP 値が (RBP + 8) の場所に格納されており、ptrace PEEKDATA を使用して読み取ることができると仮定します。私の仮定は正しいですか?

4

1 に答える 1

2

スタックにプッシュされた戻りアドレスは、現在実行中の関数で%ripはなく、現在実行中の関数が戻った後の開始のみを取得します%rip%ripGDB と同じ方法で現在の情報を取得できるはずです。

  • プラットフォームがPTRACE_GETREGSorPTRACE_GETREGSET引数をサポートしているのが理想的です。あなたのマンページとヘッダーファイルは、ここからの残りの方法を取得する必要があります.
  • PTRACE_PEEKUSERそれができない場合は、適切なオフセットで引数を使用して、ユーザー領域からレジスタを取得できるはずです。

gdb/amd64-linux-nat.cGDB ソース ツリーで詳細を確認できます。

于 2010-07-10T15:07:15.800 に答える