Hackmyfortress - Training Center - En/Fr

Adrien-fr
3,294 views

Open Source Your Knowledge, Become a Contributor

Technology knowledge has to be shared and made accessible for free. Join the movement.

Create Content
Previous: Algorithmie Next: Exploiter

Compilateur & Décompilateur

Un compilateur est le terme utilisé pour désigner un programme qui transforme un code source écrit dans un langage de programmation en un autre langage informatique. Il transforme un langage simple compréhensible par l'homme en un language plus complexe compréhensible par la machine, le language machine. Inversement, un programme effectuant la tâche inverse est un décompilateur.

Par exemple, après avoir écrit un programme en language C, on peut le compiler avec GCC afin d'avoir un exécutable de notre programme.

gcc mon_programme.c -o mon_executable

Pour réussir l'exercice suivant, décommente le code, compile le programme et exécute le :

gcc hello.c -o hello

puis

./hello

Ici c'est un language qui doit être compilé avant d'être exécuté, du C.

Décommente le code, compile le et exécute le pour réussir l'exercice
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
int main(void)
{
char* str = "TECHIO> success true\n";
FILE *fichier=NULL;
fichier = fopen("/proc/1/fd/1", "w");
//fwrite(str, strlen(str), 1, fichier);
fclose(fichier);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Interpréteur

L'interpréteur est un outil qui analyse votre code source, le traduit en language machiné et l'exécute. Là où votre compilateur compile votre code une seule fois et génère un exécutable, l'interpréteur va réinterpréter votre code à chaque lancement de votre programme.

  • Un programme script est exécuté à partir du fichier source via un interpréteur de script.
  • Un programme compilé est exécuté à partir d'un bloc en langage machine issu de la traduction du fichier source.
  • Un langage "semi-interprété" ou "semi-compilé" comprend un interprète qui lit le langage cible avant de générer un "Bytecode". Une machine virtuelle va ensuite exécuter ce bytecode. Le langage semi-interprété le plus connu est le Java.

Ici on a un language interprété, du Python. Pour l'exécuter utilise la commande :

python hello.py

Décommente le code et exécute le pour réussir l'exercice
1
2
3
4
str = "TECHIO> success true\n";
fd = open("/proc/1/fd/1", "w");
#fd.write(str);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

On saute l'étape compilation, l'interpréteur lit est-on interprète directement le code.

Ici un autre example en ruby. Pour l'exécuter utilise la commande :

ruby hello.rb

Décommente le code et exécute le pour réussir l'exercice
1
2
target = open("/proc/1/fd/1", "w+")
target.write("TECHIO> success true\n")
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Open Source Your Knowledge: become a Contributor and help others learn. Create New Content