Skip to content

Glossary

Registre RSI

RSI est le registre d'index source 64 bits de x86-64, pointeur source des opérations sur chaînes et argument de fonction sur System V.

RSI est un registre général 64 bits de l'architecture x86-64, qui étend ESI. Le nom signifie source index (index source) : dans les instructions sur chaînes et blocs telles que movs, lods et cmps, RSI est le pointeur source implicite, avancé automatiquement par le drapeau de direction après chaque élément.

Les deux ABI traitent RSI très différemment en tant que registre d'argument. Dans la System V AMD64 ABI (Linux, macOS), RSI est le deuxième argument entier/pointeur et est sauvegardé par l'appelant. Dans la Microsoft x64 ABI (Windows), RSI n'est pas du tout un registre d'argument — il est sauvegardé par l'appelé (non volatil), donc une fonction Windows doit le préserver avant usage.

Sous-registres

asm
lea rsi, [src]       ; pointeur source
lea rdi, [dst]       ; pointeur destination
mov rcx, len
rep movsb            ; copie RCX octets de RSI vers RDI
; esi = 32 bits de poids faible (met à zéro la moitié haute à l'écriture)
; si  = 16 bits de poids faible
; sil = 8 bits de poids faible

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

Dans une boucle rep movs/cmps, RSI pointe toujours vers les données en cours de lecture — le savoir vous permet d'identifier immédiatement le tampon source d'une copie ou d'une comparaison. En tant que registre d'argument, c'est le deuxième paramètre sous Linux, mais sous Windows un push rsi dans le prologue signale qu'il est préservé, pas passé.

Voir le concept général de registre et la référence assembleur. La répartition entre ABI est détaillée dans assembleur x86 vs x64. Il travaille de pair avec le registre RDI, la destination des mêmes opérations.