2
gdb的$ pc寄存器与x86 32位处理器中的eip寄存器不同吗? gdb中有四个标准寄存器可用,如$ pc。所以如果它是不同名称的相同寄存器,那么映射是如何完成的?GDB寄存器与处理器寄存器不同吗?
gdb的$ pc寄存器与x86 32位处理器中的eip寄存器不同吗? gdb中有四个标准寄存器可用,如$ pc。所以如果它是不同名称的相同寄存器,那么映射是如何完成的?GDB寄存器与处理器寄存器不同吗?
在GDB的$pc
只是为$EIP
上ix86
的别名,$RIP
上x86_64
,为$pc
上ARM
,MIPS
和SPARC
,为$ip
上ia64
等
那其他三个寄存器?我的意思是$ sp,$ fp和$ ps
他们呢?在ix86
,$sp
是$esp
的别名,在x86_64
它是$RSP
的别名,在MIPS
它是$r29
别名等
的$ps
是ix86
和x86_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
...
(这不是它实际上是如何实现的,而仅仅是一对一映射的解释。)
那么其他三个寄存器呢?我的意思是$ sp,$ fp和$ ps。这些寄存器映射到哪个?另外我还没有得到关于一对一编译的观点。 – Kaustav
@Kaustav我已经更新了答案。 –
谢谢得到我的答案。但我想你忘了提及别名$ fp – Kaustav