Glossary
Registre RDX
RDX est le registre de données 64 bits de x86-64, un registre d'argument qui contient aussi la moitié haute des résultats de mul et de div.
RDX est un registre général 64 bits de l'architecture x86-64, l'extension de EDX. Le « D » signifie data (données). Son rôle spécial déterminant est dans l'arithmétique large : RDX:RAX forment ensemble une paire de 128 bits, donc mul/imul placent les 64 bits supérieurs d'un produit dans RDX, et div/idiv lisent la moitié haute du dividende depuis RDX et y laissent le reste.
En tant que registre d'argument, RDX est cohérent entre les conventions d'une manière que les autres ne sont pas. Dans la System V AMD64 ABI, c'est le troisième argument entier ; dans la Microsoft x64 ABI, c'est le deuxième. Dans les deux ABI, RDX est sauvegardé par l'appelant (volatil). System V utilise aussi RDX comme registre de retour secondaire pour les résultats 128 bits renvoyés dans RAX:RDX.
Sous-registres
xor edx, edx ; efface la moitié haute avant une division non signée
mov rax, 100
div rcx ; RAX = quotient, RDX = reste
; edx = 32 bits de poids faible (met à zéro la moitié haute à l'écriture)
; dx = 16 bits de poids faible
; dl = 8 bits de poids faiblePourquoi c'est important en rétro-ingénierie
Repérer xor edx, edx juste avant un div vous indique que le code effectue une division non signée et efface le dividende haut — un idiome courant. En tant que registre d'argument, RDX est le troisième arg sous Linux et le deuxième sous Windows, donc sa signification dépend de l'ABI cible.
Voir le concept général de registre et la référence assembleur. Pour les spécificités d'ABI, voir assembleur x86 vs x64. Il s'associe au registre RAX pour les calculs 128 bits et suit le registre RCX dans l'ordre des arguments.