• Aucun résultat trouvé

3.2 Le langage de programmation

3.2.2 Haskell

Les r´esultats obtenus en ´etudiant les binaires issus de sources ´ecrites en OCaml nous ont guid´es vers un autre langage fonctionnel, Haskell. Cependant, cette ´etude est arriv´ee tard, et un corpus d´edi´e `a cette ´etude n’a pas pu ˆetre constitu´e. Les binaires ´etudi´es ici sont pr´esents sur un syst`eme qui n’a pas ´et´e con¸cu avec pour objectif l’analyse du langage. Seuls deux binaires ont donc ´et´e identifi´es comme ayant des sources en Haskell, gitit et pandoc.

Le premier logiciel, pandoc est un utilitaire pour traduire un texte de certains formats vers d’autres, notamment TEX, HTML ou encore markdown. Le binaire fait 283,7 ko, contient 6144 gadgets, dont 2219 gadgets uniques. Le second logiciel, plus petit, est gitit. Ce logiciel est un service web permettant l’´edition de wiki, permettant `a la fois une saisie de wiki classique et une modification versionn´ee

3.2. LE LANGAGE DE PROGRAMMATION 91

bas´ee sur le logiciel git. Le logiciel gitit d´epend aussi de pandoc. Le binaire de gitit a une section ex´ecutable de 25,8 ko, et comprend 829 gadgets dont 372 uniques. Les deux binaires sont construits pour le mˆeme syst`eme, Gentoo Linux x86 64.

Le corpus d’analyse est donc bien plus restreint que celui utilis´e pour l’´etude du langage OCaml. Le corpus est cependant suffisant pour valider le cas particulier d’OCaml. La premi`ere est de confirmer le gadget signature pr´esent´e comme ´etant bien une signature du langage OCaml et non du paradigme fonctionnel. Comme on a montr´e qu’aucun compilateur pr´esent dans le corpus (dont celui du langage Haskell) ne g´en´erait le gadget signature d’OCaml, le d´etail des gadgets d’Haskell n’invalide pas ce r´esultat. Cependant, la pr´esence de gadgets ´equivalents pour les deux binaires Haskell est int´eressante. Le tableau 3.5 pr´esente les gadgets les plus pr´esents dans ces deux binaires. Ce tableau montre plusieurs ´el´ements permettant de valider un comportement du paradigme fonctionnel. En effet, le gadget le plus pr´esent dans ces deux binaires est le gadget de taille 1 suivant : jmp qword ptr [rbx], gadget qui est plus pr´esent en moyenne que le simple gadget ret. Le gadget est tr`es pr´esent dans ces deux binaires et assez proche du gadget signature d’OCaml mov rdi, qword ptr [rbx] ; call rdi. Cependant, contrairement `a ce dernier, le gadget le plus pr´esent dans les deux binaires aux sources en Haskell n’est pas limit´e `

a ce langage. Ce gadget est pr´esent dans des logiciels ´ecrits dans diff´erents langages, et de mani`ere fr´equente. En effet, 21 binaires comptent ce gadget plus de 200 fois ce gadget, comme Wireshark (C), Inkscape (C++), gregorio (OCaml) ou encore gnat-gps (ADA). Le d´enombrement utilis´e ici n’est pas des plus pertinents, car, par exemple, gitit n’est pas dans les 21 binaires list´es, car trop petit. Cela permet cependant de confirmer que le gadget est g´en´er´e par beaucoup de compilateurs. Le gadget est suffisamment petit (juste une instruction pivot) pour ne pas ˆetre aussi sp´ecifique.

Le tableau 3.5 montre aussi qu’un autre gadget est tr`es pr´esent, mais que dans un seul des deux binaires. En effet le gadget add byte ptr [rax], al ; retf 0 n’est pr´esent que dans le binaire pandoc. Il a la particularit´e d’avoir un pivot classique ´ecrit de mani`ere peu conventionnelle. En effet, l’instruction retf 0 est en tout point ´equivalente `a l’instruction ret. Elle pr´ecise cependant qu’aucune action pour vider la pile suppl´ementaire n’est r´ealis´ee. L’instruction retf 0x10 par exemple vide la pile d’ex´ecution de 8 octets suppl´ementaires `a la sortie de fonction. Cela permet `a un processeur de lib´erer de la m´emoire en une seule instruction. Le gadget particulier ici a une densit´e non n´egligeable, puisqu’il est pr´esent 0,989 fois

Gadget Nombre d’occurrences

Nombre de

binaires Occurrence moyenne

jmpqword ptr [rbx] 972 2 486,00

ret 691 2 345,50

add byte ptr [rax],al; retf 0 274 1 274,00

retf 0 274 1 274,00

add byte ptr [rax],al; add byte ptr [rax],al;

273 1 273,00 add dword ptr [rax],eax ; add byte ptr [rax],al; retf0

add byte ptr [rax],al; add dword ptr [rax],eax;

273 1 273,00 add byte ptr [rax],al; retf0

add dword ptr [rax],eax ; add byte ptr [rax],al; retf 0 273 1 273,00

retf 82 2 41,00

add ebp, 8 ; jmpqword ptr [rbx] 81 2 40,50 addrbp, 8 ; jmpqword ptr [rbx] 81 2 40,50 andrbx, 0xfffffffffffffff8 ; addrbp, 8 ; jmpqword ptr [rbx] 75 2 37,50

Table 3.5 – Gadgets les plus pr´esents dans les deux binaires Haskell gitit et pandoc

par ko de section ex´ecutable. Comme pour l’autre gadget pr´esent dans ce tableau, ce comportement n’est pas limit´e au compilateur du langage Haskell. Le corpus initial comporte en effet 69 binaires ayant une densit´e sup´erieure `a 0,5 par ko. La majorit´e de ces binaires, comme ecl, un interpr´eteur et traducteur de LISP, et perl ont des tailles de section ex´ecutables tr`es faibles, en dessous de 2 ko. Seuls 13 de ces binaires ont une taille sup´erieure `a 2 ko. Ces binaires sont pandoc, ´etudi´e ici, et les binaires associ´es aux deux logiciels ssh-add et ssh-agent sur 6 syst`emes x86 64 (Arch Linux, Gentoo Linux, Ubuntu 16.04, Fedora, Debian 9, Debian Testing). Ces deux utilitaires de gestion de clef ssh sont tous les deux ´ecrits en C, et ont une taille de section ex´ecutable comparable aux 284 ko de pandoc, entre 155 ko et 181 ko.

Cette petite ´etude autour des deux logiciels aux sources en Haskell nous a permis de voir que tous les langages n’ont pas forc´ement des gadgets marquants. Cependant, l’utilisation de certains gadgets peut ˆetre sup´erieure `a ce qui est fait en moyenne dans les autres langages et une g´en´eration de binaire peut ˆetre class´ee comme normale pour un compilateur et atypique pour d’autres, dans la limite de notre corpus d’analyse ici. Les r´esultats pr´esent´es dans cette section ainsi que la section 3.2.1 `a propos du langage OCaml montrent que le choix du langage a un effet cons´equent sur les diff´erents gadgets rencontr´es. Une ´etude plus approfondie notamment en utilisant d’autres m´etriques et des corpus plus importants est envisageable.