2016-05-01 5 views
0

私はすべての呼び出しとretをキャッチしていることを除いて、straceのような小さなプログラムを作っています。 私は間接呼び出しのためにすべての呼び出しとretを取得する方法を見つけることができないので、私はret opcodeの起源となる関数を取得する方法を探したいと思います。あなたはそれを行う方法について何かを持っていますかプログラムをトレースしているときにretオペコードの起点を知る方法

+0

これはどの命令セットですか? –

答えて

1

retは何をシミュレートできますか:アドレス%espのスタックを調べ、その値にEIPを設定します。現在のスタックのアドレスの前の命令はここではcallになります。

+0

okですが、前の命令のサイズが固定されていないので、この命令の最初に戻るのは難しいですか? –

+1

はい、それはすべての可変サイズのオペコード・アーキテクチャーの一般的な制限です。逆方向に進むことはできません。しかし、あなたは呼び出し関数を知っています。なぜあなたは最初に '呼び出し'を取得したいのか分かりませんが、それを行う方法はあなたが知っている有効な点から関数全体を逆アセンブルし、 'ret'によって読み込まれたアドレスで停止します。 – phihag

関連する問題