2017-03-04 15 views
-2

、私は、これは関数コールバックは、RCXによって指さ呼び出すことを理解デコードアセンブリコールバック私のアセンブリコードで

callq *%rcx 

を言うラインを持っています。しかし、私は、このコールバックが実装されている/実行されているものはどこにあるのかわかりません。私はこれをどのように把握できますか?

+0

**デバッガを使用する** –

+0

@ user3847447 '%rcx'はCPUレジスタを示します。明示的なアドレスがロードされていることを示す以前の他のコマンドがない場合は、デバッガを使用することが実際には唯一の方法です。 (私は "頭でデバッグする"はこの場合のオプションではないと思います) – Scheff

+0

'%rcx'がどのアドレスを指しているのか調べ、そのアドレスのメモリを逆アセンブルします。 – fuz

答えて

0

これをどのように把握できますか?

(gdb) x/10i $rcx 

CALL直後に実行を開始しますどのようなコードを紹介します。

そのコードにラベルが付いている場合(つまり、名前付き関数の一部である場合)、GDBにもそのコードが表示されます。そのコードがどこから来たのか推測できます(または-Wl,-y,name)。

このコードにラベルが付いていない場合は、原点を簡単に見つける方法がありません。実行可能ファイルを再リンクできる場合は、リンカー-Wl,--print-mapが役立ちます。

関連する問題