したがって、プログラムのレジスタにアクセスできると仮定します。私はesp、ebp、eipにアクセスできます。eipは実行する必要のある次の命令を指しており、ebpは別のフレームポインターを指しており、espはスタックの最上位を指しています。私はこれを理解していますが、スタックの残りの部分やそれを解析する方法を理解していません。
たとえば、フレームのローカル変数を取得したい場合は、減算して(それがよりも大きいアドレスであるebp - esp
ことを知っている)、それらのアドレスを調べて逆参照する必要がありますか?これは、その特定のフレームからローカル変数を取得するための適切な方法ですか?ebp
esp
別の質問ですが、どの機能が各フレームに関連しているかを把握するための最良の方法は何でしょうか?アドレスから1を減算し、ebp
その値を逆参照する場合、リターンアドレス「0x804 ...」を取得する必要がありますか?このアドレスと機能の関係は何ですか?たとえば、Foo()のPCアドレスが高く、PCアドレスが0x8045555
低い場合0x8045550
、これらのアドレスの間にある差出人住所はありますか?
事前に感謝し、私が十分に明確でなかった場合は私に知らせてください。
注:誰かがより良いタイトルを持っている場合、それを提案しますが、私はより良いタイトルを見つけられませんでした。