2017-05-08 16 views
0

我無法在當前位置進行反彙編。 GDB不承認.(點)爲「這裏」:如何將「disass <something>」別名轉換爲當前位置的反彙編?

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

從功能開始發行disass $pc反彙編,而不是「這裏」:

(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> 
... 

如何創建一個別名或規則提供在當前位置的反彙編,當前位置之前的一些指令數量,以及當前位置之前的一些指令數量?

看來這應該是內置功能,但GDB似乎沒有提供它。其他低級調試器,如WinDbg,具有內置功能。

回答

1

disas拆卸整個功能(按設計和記錄)。

您正在尋找x/10i $pc(用所需數量的指令替換10)。

我該如何別名disass。到上面的命令?

有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我已經更新了答案。 –