-2
、私は、これは関数コールバックは、RCXによって指さ呼び出すことを理解デコードアセンブリコールバック私のアセンブリコードで
callq *%rcx
を言うラインを持っています。しかし、私は、このコールバックが実装されている/実行されているものはどこにあるのかわかりません。私はこれをどのように把握できますか?
、私は、これは関数コールバックは、RCXによって指さ呼び出すことを理解デコードアセンブリコールバック私のアセンブリコードで
callq *%rcx
を言うラインを持っています。しかし、私は、このコールバックが実装されている/実行されているものはどこにあるのかわかりません。私はこれをどのように把握できますか?
これをどのように把握できますか?
(gdb) x/10i $rcx
CALL
直後に実行を開始しますどのようなコードを紹介します。
そのコードにラベルが付いている場合(つまり、名前付き関数の一部である場合)、GDBにもそのコードが表示されます。そのコードがどこから来たのか推測できます(または-Wl,-y,name
)。
このコードにラベルが付いていない場合は、原点を簡単に見つける方法がありません。実行可能ファイルを再リンクできる場合は、リンカー-Wl,--print-map
が役立ちます。
**デバッガを使用する** –
@ user3847447 '%rcx'はCPUレジスタを示します。明示的なアドレスがロードされていることを示す以前の他のコマンドがない場合は、デバッガを使用することが実際には唯一の方法です。 (私は "頭でデバッグする"はこの場合のオプションではないと思います) – Scheff
'%rcx'がどのアドレスを指しているのか調べ、そのアドレスのメモリを逆アセンブルします。 – fuz