2016-05-01 130 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