Que fait cette instruction Intel jmpq?
Comment est l'adresse 0x600860
calculées lors de l'Intel instructions ci-dessous? 0x4003b8
+ 0x2004a2
= 60085a
donc je ne vois pas comment le calcul est effectué.
0x4003b8 <puts@plt>: jmpq *0x2004a2(%rip) # 0x600860 <[email protected]>
source d'informationauteur RouteMapper
Vous devez vous connecter pour publier un commentaire.
Sur Intel, JMP, APPEL, etc. sont par rapport au compteur de programme, de la prochaine instruction.
L'instruction suivante dans votre cas a été à
0x4003be
et0x4003be + 0x2004a2 == 0x600860
C'est AT&T syntaxe d'une mémoire indirecte JMP avec un RIP-relative mode d'adressage.
Le saut de l'adresse est récupérée à partir de l'emplacement mémoire spécifié par rapport au pointeur d'instruction:
tout d'abord calculer
0x4003be + 0x2004a2 == 0x600860
de récupérer l'adresse de saut à partir d'un emplacement0x600860
.D'autres modes d'adressage sont possibles, par exemple un saut de table peut utiliser
jmpq *(%rdi, %rax, 8)
avec la table de la base de RDI et de l'index dans RAX.RIP-l'adressage relatif, pour les données statiques commune, bien. Dans ce cas, c'est aborder une entrée dans l'EU (Global Offset Table), mis en place par la liaison dynamique.