Table des matières

, , ,

RIP : Rétro-Ingénierie de Programmes

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.

Module 1 : Rappels de compilation

Génération d'un exécutable

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 :

hello.c
#include <stdio.h>
 
int main(void){
        printf("Hello World!!!\n");
        return 0;
}

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!!!

Qu'est ce qu'un programme compilé ?

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

Si on 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

Structure globale du format ELF

ELF signifie Executable and Linkable Format

⌂ Retour au sommaire | Suivant ▷