Skip to content

Glossary

Registre RCX

RCX est le registre compteur 64 bits de x86-64, utilisé pour les comptes de boucle et de décalage et pour passer des arguments dans les deux ABI majeures.

RCX est un registre général 64 bits de l'architecture x86-64, qui étend l'ancien ECX. Le « C » signifie counter (compteur) : des instructions comme loop, rep movs et la famille décalage/rotation (shl, shr) utilisent CL ou RCX comme compte implicite de répétition ou de décalage. Ce rôle implicite rend RCX immédiatement reconnaissable dans les boucles serrées de copie et de chaînes.

C'est aussi un registre d'argument, mais les deux ABI divergent sur la position. Dans la System V AMD64 ABI (Linux, macOS), RCX transporte le quatrième argument entier/pointeur. Dans la Microsoft x64 ABI (Windows), RCX transporte le premier argument. Dans les deux conventions, RCX est sauvegardé par l'appelant (volatil) et n'est pas utilisé pour la valeur de retour.

Sous-registres

asm
mov rcx, 16          ; compte de boucle
rep movsb            ; copie RCX octets de RSI vers RDI
; ecx = 32 bits de poids faible (met à zéro la moitié haute à l'écriture)
; cx  = 16 bits de poids faible
; cl  = 8 bits de poids faible (utilisé comme compte de décalage par shl/shr)

Pourquoi c'est important en rétro-ingénierie

Quand vous voyez RCX positionné juste avant un call dans des binaires Windows, il s'agit presque certainement du premier argument — fréquemment un pointeur this pour les méthodes C++. Sous Linux, c'est le quatrième argument. Reconnaître RCX comme le compte actif dans les instructions préfixées par rep et loop vous indique d'un coup d'œil la taille d'une opération mémoire.

Voir le concept général de registre et la référence assembleur. Les différences d'ABI sont traitées dans assembleur x86 vs x64. À comparer avec le registre RDX, l'argument suivant dans la séquence.