2017-05-08 16 views
0

現在の場所で逆アセンブリを取得できません。 GDBは、「ここ」として.(ドット)を認識しません:disass $pcを発行'disass <something>'のエイリアスを現在の場所で逆アセンブルする方法はありますか?

(gdb) disass . 
A syntax error in expression, near `.'. 

は「ここ」機能を開始してから分解しない:

(gdb) disass $pc 
Dump of assembler code for function _ZN8CryptoPP6RDSEED13GenerateBlockEPhm: 
    0x000000000056b962 <+0>:  push %r13 
    0x000000000056b964 <+2>:  push %r12 
    0x000000000056b966 <+4>:  push %rbp 
... 

<skip 5 pages of output> 

    0x000000000056ba88 <+294>: mov %rdi,0x8(%rsp) 
=> 0x000000000056ba8d <+299>: test %edx,%edx 
    0x000000000056ba8f <+301>: je  0x56ba7f <_ZN8CryptoPP6RDSEED13GenerateBlockEPhm+285> 
... 

どのように私はエイリアスまたはAを作成してください現在の位置での逆アセンブリ、現在の位置より前のいくつかの命令、および現在の位置からの命令のいくつかの数を提供するルール?

これは組み込みの機能でなければならないようですが、GDBはそれを提供していないようです。 WinDbgのような他の低レベルデバッガには、組み込みの機能があります。

答えて

1

disasは、(設計および文書化されているように)機能全体を逆アセンブルします。

あなたはx/10i $pcを探しています(必要な指示数で10を置き換えてください)。

どのように私はエイリアスにすることができます。上記のコマンドに?

は、GDB aliasコマンドがありますが、それはそれを使用する私の試みを拒否:

(gdb) alias ds = x/10i $pc 
Invalid command to alias to: x/10i $pc 

ユーザー定義コマンドの作品:ロシア就業

(gdb) define disas 
Type commands for definition of "disas". 
End with a line saying just "end". 
>x/10i $pc 
>end 
+0

感謝。上記のコマンドに 'disass。 'の別名を付けるにはどうすればいいですか?私は余分なタイピングをしたり、余分なコマンドを覚えてみたりしたくありません。 – jww

+0

@jww私は答えを更新しました。 –