2016-05-01 135 views

回答

3

在GDB的$pc只是爲$EIPix86的別名,$RIPx86_64,爲$pcARMMIPSSPARC,爲$ipia64

那其他三個寄存器?我的意思是$ sp,$ fp和$ ps

他們呢?在ix86$sp$esp的別名,在x86_64它是$RSP的別名,在MIPS它是$r29別名等

$psix86x86_64$EFLAGS的別名。 MIPS沒有等效的寄存器,所以$ps不映射到那裏的任何東西。

如果以不同的名稱相同的寄存器映射,然後怎麼做

GDB內部,有一個編譯時的一個一對一映射。

我沒有得到有關編譯,在一對一

字面上 GDB內部地圖,看起來像這樣的地步:

if current target is i*86 
    if the user typed $pc return $eip 
    else if the user typed $fp return $ebp else 
    ... 
else if current target is x86_64 
    if the user typed $pc return $rip 
    else if the user typed $fp return $rbp 
    ... 

(這不是它實際上是如何實現的,而僅僅是一對一映射的解釋。)

+1

那麼其他三個寄存器呢?我的意思是$ sp,$ fp和$ ps。這些寄存器映射到哪個?另外我還沒有得到關於一對一編譯的觀點。 – Kaustav

+0

@Kaustav我已經更新了答案。 –

+0

謝謝得到我的答案。但我想你忘了提及別名$ fp – Kaustav