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