Ist das $ pc-Register von gdb anders als das eip-Register in x86 32-Bit-Prozessor? Es gibt vier Standardregister, die in gdb wie $ pc verfügbar sind. Also, wenn es die gleichen Register mit verschiedenen Namen ist, wie wird das Mapping gemacht?Unterscheiden sich GDB-Register von Prozessorregistern?
Antwort
in GDB Die $pc
ist nur ein Alias für $EIP
auf ix86
, für $RIP
auf x86_64
, für $pc
auf ARM
, MIPS
und SPARC
, für $ip
auf ia64
usw.
was ist mit den anderen drei Registern ? Ich meine $ sp, $ fp und $ ps
Was ist mit ihnen? Auf ix86
ist $sp
ein Alias für $esp
, auf x86_64
ist es ein Alias für $RSP
, auf MIPS
es ist ein Alias für $r29
usw.
Der $ps
ist ein Alias für $EFLAGS
auf ix86
und x86_64
. Es gibt kein gleichwertiges Register unter MIPS
, daher wird $ps
dort nichts zugeordnet.
wenn es die gleichen Register mit unterschiedlichen Namen ist dann, wie die Abbildung
Innen GDB getan wird, gibt es eine kompilierte in einer Eins-zu-Eins-Karte.
Ich habe nicht den Punkt über einkompilierte in 00.59
Es gibt buchstäblich eine Karte innerhalb GDB, die wie folgt aussieht:
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
...
(Diese ist nicht, wie es tatsächlich implementiert wird, sondern nur eine Erklärung der Eins-zu-eins-Abbildung.)
Und was ist mit den anderen drei Registern? Ich meine $ sp, $ fp und $ ps. Wessen Register sind diese zugeordnet? Ich habe auch nicht den Punkt über eins zu eins kompiliert bekommen. – Kaustav
@Kaustav Ich habe die Antwort aktualisiert. –
Vielen Dank meine Antwort. Aber ich glaube, du hast vergessen, den Aliasnamen von $ fp zu erwähnen – Kaustav