Skip to content

Glossary

Registre RBX

RBX est un registre général 64 bits de x86-64, traditionnellement un pointeur de base, sauvegardé par l'appelé et préservé à travers les appels.

RBX est un registre général 64 bits de l'architecture x86-64, l'extension de l'ancien EBX. Le « B » signifiait à l'origine base, car dans le code 16 bits BX était l'un des rares registres utilisables pour l'adressage mémoire. Aujourd'hui, c'est simplement un registre de travail flexible doté d'une propriété importante : il est préservé à travers les appels.

Dans la System V AMD64 ABI comme dans la Microsoft x64 ABI, RBX est sauvegardé par l'appelé (non volatil). Une fonction qui veut utiliser RBX doit d'abord sauvegarder la valeur de l'appelant — généralement avec push rbx dans le prologue — et la restaurer avant de retourner. Il n'est pas utilisé pour passer des arguments ni renvoyer des valeurs dans l'une ou l'autre convention, ce qui en fait un emplacement naturel pour une valeur qui doit survivre à plusieurs appels au sein d'une fonction.

Sous-registres

asm
push rbx              ; préserve la valeur de l'appelant
mov rbx, rdi          ; conserve un argument qui doit survivre aux appels ultérieurs
; ebx = 32 bits de poids faible (met à zéro la moitié haute à l'écriture)
; bx  = 16 bits de poids faible
; bl  = 8 bits de poids faible
pop  rbx              ; restaure avant le ret

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

Voir push rbx près du début d'une fonction est un indice fort que la routine conserve une valeur à longue durée de vie — souvent un compteur de boucle, un pointeur d'objet ou un handle this. Comme la valeur est préservée, vous pouvez vous fier à RBX pour rester pertinent à travers les appels imbriqués, ce qui le rend facile à suivre dans un débogueur.

Voir le concept général de registre et la référence assembleur. Pour comprendre comment les règles de préservation ont évolué entre les architectures, lisez assembleur x86 vs x64. À comparer avec le registre RAX, volatil.