Salut,
J'ai un truc que je ne comprends pas. Le rôle de la fonction shrq dans
le code suivant :
xorl %eax, %eax
leaq _bss(%rip), %rdi
leaq _ebss(%rip), %rcx
subq %rdi, %rcx
shrq $3, %rcx
rep stosq
Le code est tiré de l'installateur du noyau. Le but est de faire un
reset de la section .bss avant de décomprimer le noyau comprimé qui
vient d'être recopié. C'est l'ultime étape avant la décompression du
noyau.
On met l'accumulateur à zéro pour servir d'écrase... registre (xor)
On charge l'adresse de base de la section .bss (1er leaq)
On charge l'adresse de fin de la section .bss (2e leaq)
On calcule la différence relative que l'on place dans RCX
????
On répète RCX fois la copie de EAX (cela devrait être RAX : je pense
qu'il y a une typo ici, comme à la première ligne) à l'adresse mémoire
contenue dans RDI (donc la base de la section la première fois), avec
un incrément de RDI à chaque fois. Bref, on écrit des zéros partout
dans la zone .bss sur la bonne longueur. (rep...)
Le shrq est un décalage logique de CRX et je ne comprends pas son
intérêt. Il est aussi présent lorsque l'installateur copie le noyau
(avec rep movsq cette fois).
Merci de votre aide,
PK
--
|\ _,,,---,,_ Patrice KARATCHENTZEFF
ZZZzz /,`.-'`' -. ;-;;,_ mailto:patrice.karatchentzeff@gmail.com
|,4- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_)