lundi 20 janvier 2020

Chapitre 79 : Assembleur Arm 64 : lecture d’une page d’un site Web.


Au chapitre 56, nous avons vu l’utilisation des sockets en 32 bits pour accéder à une page sur Internet. A l’aide des tests des fonctions système du chapitre précédent, nous allons voir la même utilisation en 64 bits.
Dans le programme rechMeteo64.s, nous lançons un thread pour exécuter la commande Linux ping pour récupérer l’adresse IP du site de méteoFrance. En effet, dans le container 64 bits de la version Buster que j’utilise, la commande Linux host n’existe pas, j’ai donc du utiliser la commande ping pour récupérer l’adresse.
Comme nous l’avons vu au chapitre précedent l’execution de la commande au travers de execve, ne retourne pas dans le programme appelant. Il nous faut donc dupliquer la sortie Sysout vers un fichier tampon à l’aide des appels system pipe (code 59) et dup3(code 24). Ce qui nous permet de récuperer l’adresse IP dans un buffer et de la convertir pour créer la socket.
Comme en 32 bits, dans la routine envoiRequeteP80 nous ouvrons la socket (code 198) créons la connexion avec le site (code 203) envoyons la requête de lecture (code 206) après avoir calculé sa longueur puis lu la réponse avec le code 207. La lecture s’effectue dans une boucle pour récuperer tout le contenu de la page.

Vous remarquerez que l'utilisation des instructions cinc et csel permettent de résoudre le remplacement des instructions conditionnelles du type incne ou moveq.
 
Le reste du programme concerne l’analyse et l’extraction des données qui nous intéressent.
Attention, ce programme ne concerne que les pages des sites accessibles en http. Pour les sites accessibles en https, il faudra utiliser la librairie openSSL comme je l’avais fait en 32 bits.

Aucun commentaire:

Enregistrer un commentaire