Ceci est une ancienne révision du document !
Notes prises lors de la participation au MOOC RIP : Rétro-Ingénierie de Programmes proposé par L'Université de Lille sur la plateforme FUN Mooc.
La compilation produit un code binaire exécutable par la machine à partir du code source écrit par le développeur.
Compilation = Code Source → Programme (binaire)
Sur une distribution GNU/Linux de type Debian, pour pouvoir compiler en C, il faut installer le paquet build-essential :
apt install -y build-essential
Crééer le fichier source C hello.c :
mkdir -p ~/dev/hello vim ~/dev/hello/hello.c
Ci-dessous le contenu du fichier :
Pour compiler le code source :
cd ~/dev/hello gcc -o hello hello.c
Le dossier contient un nouveau fichier exécutable nommé hello :
tree hello/ hello/ |-- hello `-- hello.c
Pour éxécuter le programme :
./hello Hello World!!!
Le fichier produit contient environ 16000 caractères :
ls -lh hello -rwxrwxr-x 1 yoann yoann 16K Jan 25 14:16 hello
Si on essaie d'afficher le contenu du fichier hello avec la commande cat, on s’aperçoit que la plupart des caractères ne sont pas imprimables : ce n'est donc pas un fichier au format texte.
Pour observer le contenu du fichier, on va utiliser le programme xxd :
# Installer xxd apt install -y xxd xxd hello
On peut filtrer les caractères imprimables contenus dans le binaire via la commande strings :
strings hello
Observer le contenu du fichier hello via objdump :
objdump -d -M Intel hello # Equivalent objdump --disassemble --disassembler-options=Intel hello objdump -s -M Intel hello # Equivalent objdump --full-contents --disassembler-options=Intel hello