2016-05-01 11 views

Antwort

3

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.)

+1

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

+0

@Kaustav Ich habe die Antwort aktualisiert. –

+0

Vielen Dank meine Antwort. Aber ich glaube, du hast vergessen, den Aliasnamen von $ fp zu erwähnen – Kaustav