Bingo...
En fait, on incrémente sur des adresses, donc de 8 octets en 8 octets
(64 bits). RCX contient donc une valeur en adresse, modulo 8. Pour
avoir un incrément de 1 paquet de 64 bits à chaque stosq, il faut bien
diviser l'adresse par 8.
Merci
Le jeu. 1 déc. 2022 à 15:59, Raphaël Dorado <rdorado@???> a écrit :
>
> Le "stosq" deplace 64 bits (8 octets) à chaque itération, le shrq divise le
> nombre d'octets à copier par 8 (?).
>
> Le 01/12/2022 à 15:30, Patrice Karatchentzeff a écrit :
> > 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- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_)