Re: Assembleur x86-64 made in kernel

Page principale

Répondre à ce message
Auteur: Raphaël Dorado
Date:  
À: guilde
Sujet: Re: Assembleur x86-64 made in kernel
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
>