gdb的$ pc寄存器是否与x86 32位处理器中的eip寄存器不同? gdb中有四个标准寄存器,如$ pc。那么,如果它是具有不同名称的相同寄存器,那么映射是如何完成的?
答案 0 :(得分:3)
GDB中的$pc
只是$EIP
上的ix86
,$RIP
x86_64
,$pc
上ARM
的别名1}},MIPS
和SPARC
,$ip
上ia64
等等。
其他三个寄存器怎么样?我的意思是$ sp,$ fp和$ ps
他们呢?在ix86
上,$sp
是$esp
的别名,在x86_64
上是$RSP
的别名,在MIPS
上是$r29
的别名1}}等等。
$ps
是$EFLAGS
和ix86
上x86_64
的别名。 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
...
(这不是它实际实现的方式,而只是对一对一映射的解释。)