Le registre $ pc de gdb est-il différent du registre eip dans le processeur x86 32 bits? Il y a quatre registres standard disponibles dans gdb comme $ pc. Donc, si ce sont les mêmes registres avec des noms différents, comment la cartographie est faite?Les registres GDB sont-ils différents des registres du processeur?
Répondre
Le $pc
dans GDB est juste un alias pour $EIP
sur ix86
, pour $RIP
sur x86_64
, pour $pc
sur ARM
, MIPS
et SPARC
, pour $ip
sur ia64
, etc.
ce que les trois autres registres ? Je veux dire $ sp, $ fp et $ ps
Qu'en est-il? Sur ix86
, $sp
est un alias pour $esp
, sur x86_64
il est un alias pour $RSP
, sur MIPS
il est un alias pour $r29
, etc.
Le $ps
est un alias pour $EFLAGS
sur ix86
et x86_64
. Il n'y a pas de registre équivalent sur MIPS
, donc $ps
ne correspond à rien ici.
si ce sont les mêmes registres avec des noms différents alors comment le mappage est effectué
gdb, il y a compilé dans un à une carte.
Je n'ai pas le point au sujet de la compilation association un à un
Il y a littéralement une carte à l'intérieur GDB, qui ressemble à ceci:
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
...
(Ce n'est pas comment il est réellement mis en œuvre, mais juste une explication du mappage un-à-un.)
Et les trois autres registres? Je veux dire $ sp, $ fp et $ ps. Pour lesquels ces registres sont mappés? Aussi, je n'ai pas compris le point sur compilé-en un à un. – Kaustav
@Kaustav J'ai mis à jour la réponse. –
Merci d'avoir eu ma réponse. Mais je pense que vous avez oublié de mentionner le nom d'alias de $ fp – Kaustav