X86 GDB寄存器与处理器寄存器不同吗?

X86 GDB寄存器与处理器寄存器不同吗?,x86,gdb,cpu-registers,X86,Gdb,Cpu Registers,gdb的$pc寄存器与x86 32位处理器中的eip寄存器不同吗?gdb中有四个标准寄存器,如$pc。因此,如果是相同的寄存器,名称不同,那么映射是如何完成的?gdb中的$pc只是ix86上的$EIP的别名,对于x86_64上的$RIP,对于ARM上的$pc的别名,MIPS和SPARC,用于ia64上的$ip,等等 其他三个寄存器呢?我指的是$sp、$fp和$ps 那他们呢?在ix86上,$sp是$esp的别名,在x86\u 64上是$RSP的别名,在MIPS上是$r29的别名,等等 $ps是i

gdb的$pc寄存器与x86 32位处理器中的eip寄存器不同吗?gdb中有四个标准寄存器,如$pc。因此,如果是相同的寄存器,名称不同,那么映射是如何完成的?

gdb中的
$pc
只是
ix86
上的
$EIP
的别名,对于
x86_64
上的
$RIP
,对于
ARM
上的
$pc
的别名,
MIPS
SPARC
,用于
ia64
上的
$ip
,等等

其他三个寄存器呢?我指的是$sp、$fp和$ps

那他们呢?在
ix86
上,
$sp
$esp
的别名,在
x86\u 64
上是
$RSP
的别名,在
MIPS
上是
$r29
的别名,等等

$ps
ix86
x86\u 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。这些寄存器映射到哪个?另外,我也没有理解一对一编译的要点。谢谢你,我得到了答案。但是我想你忘了提到$fp的别名了。你能回答$fp的别名吗?@Kaustav我把
$fp
留给读者作为练习。其实答案里有,你只需要仔细重读一遍。是的,这次收到了。谢谢