2016-05-01 4 views

Répondre

3

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

+1

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

+0

@Kaustav J'ai mis à jour la réponse. –

+0

Merci d'avoir eu ma réponse. Mais je pense que vous avez oublié de mentionner le nom d'alias de $ fp – Kaustav