Livre_silo 30 août 2013 16:32 Page 332
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
332
Informatique pour tous
Enregistrer ce fichier. On supposera dans la suite qu’il est enregistré dans le répertoire
/home/jdupont/TP. Il conviendra de remplacer ce nom par le nom du répertoire où ce
fichier a été enregistré.
Lancer alors un émulateur de terminal et taper la commande suivante, suivie de la touche
Entrée :
cc -o /home/jdupont/TP/hello /home/jdupont/TP/hello.c
Cette commande lance le compilateur C sur hello.c et construit le programme exécutable
hello dans le même répertoire. Constater sa présence à partir de l’explorateur de fichiers
et s’assurer que le compilateur C a bien rendu ce fichier exécutable.
On peut alors exécuter ce fichier dans le terminal en tapant :
/home/jdupont/TP/hello
Le programme s’exécute alors et devrait vous gratifier d’un laconique Hello.
Le programme exécutable est un fichier écrit en langage machine, donc incompréhensible
pour les humains. Cependant, il est possible d’en donner une représentation plus compréhensible (on dit qu’on désassemble le programme). Pour cela, taper la commande suivante :
objdump -d /home/jdupont/TP/hello | more
Devrait alors s’afficher quelque chose dont le début ressemble à ceci (si votre système est
un PC dont le système est en 64 bits) :
/home/jdupont/TP/hello :
file format elf64-x86-64
Disassembly of section .init :
00000000004003b8 <_init > :
4003b8 : 48 83 ec 08
sub
$0x8,%rsp
4003bc : e8 6b 00 00 00
callq 40042c
4003c1 : 48 83 c4 08
add
$0x8,%rsp
4003c5 : c3
retq
On peut faire défiler tout le programme désassemblé avec la barre d’espace.
Sur les quatre dernières lignes présentées ici, la première colonne est une liste d’adresses
mémoire, écrites en hexadécimal (voir exercice 2.7) . Il s’agit des adresses où seront chargées les instructions du programme. La seconde colonne en montre le contenu, écrit également sous forme hexadécimale. Enfin, les dernières colonnes donnent une représentation
sous forme plus compréhensible des instructions que représentent ces données binaires. À
la première ligne, on trouve par exemple l’instruction sub qui soustrait ici la valeur 8 du
registre nommé %rsp, puis un branchement à l’adresse 40042c (instruction call), puis une
instruction add, ajoutant la valeur 8 au registre %rsp.
Précédent

- 345/402

Suivant