Ghidra Downloadguide indépendant de téléchargement et d’installation
Français
GUIDE DU DÉCOMPILATEUR GHIDRA

Comment utiliser le décompilateur Ghidra

Le décompilateur Ghidra transforme une fonction en code machine sélectionnée en pseudo-code proche du C. Il accélère la lecture des paramètres, conditions, boucles et appels, mais toute conclusion importante doit être vérifiée dans Listing : le résultat est une interprétation, pas le code source d'origine.

Documentation officielle du décompilateur
NiveauDébutant à intermédiaire
MéthodeAnalyse statique
Ghidra12.1.2
Vérifié30 juillet 2026
RÉPONSE RAPIDE

Ce que fait le décompilateur Ghidra et ses limites

Ghidra analyse les instructions, le flux de contrôle, les conventions d'appel, les symboles et les types afin de représenter une fonction sous forme de pseudo-code lisible. Le décompilateur aide surtout à repérer les branches, boucles, arguments, valeurs de retour et relations entre appelants et fonctions appelées.

La sortie n'est pas le C ou C++ original. La compilation supprime noms et types, regroupe des expressions, réordonne des opérations et insère des fonctions. Considérez chaque nom, type et expression comme une hypothèse. Une conclusion fiable doit aussi correspondre aux instructions du Listing et aux références voisines.

Cette page se concentre sur Decompiler. Pour créer un projet, importer un fichier, lancer Auto Analysis et apprendre CodeBrowser, commencez par le tutoriel Ghidra pour débutants.

Bon modèle mental

Le pseudo-code est une carte lisible du comportement machine, pas une preuve du code source original.

DÉMARRER

Ouvrir Decompiler et le synchroniser avec Listing

Ouvrez le programme dans CodeBrowser après la fin d'Auto Analysis. Si le panneau est masqué, choisissez Window > Decompiler. Sélectionnez une fonction définie dans Listing ou Symbol Tree : le pseudo-code doit changer et surligner l'instruction correspondante.

Partez d'un repère fiable plutôt que de parcourir le fichier au hasard : chaîne unique, appel d'API importé, symbole exporté, message d'erreur ou point d'entrée connu. Suivez les références vers l'appelant et attendez la fin de l'analyse en arrière-plan.

Si aucune fonction n'est reconnue, ne définissez ses limites que si le désassemblage et les références les confirment. Une mauvaise langue processeur ou une base d'image incorrecte doit être corrigée à l'importation.

  1. 1

    Choisir un repère

    Trouvez une chaîne, un symbole, un import ou une adresse lié au comportement étudié.

  2. 2

    Suivre la référence

    Ouvrez la fonction utilisatrice et vérifiez que Listing, Symbol Tree et Decompiler montrent le même emplacement.

  3. 3

    Attendre l'analyse

    Lisez ensuite les entrées, appels, conditions, écritures et valeur de retour.

Interface officielle Ghidra CodeBrowser servant à sélectionner une fonction
Interface officielle : CodeBrowser réunit Listing, symboles et contexte du décompilateur.
INTERPRÉTER

Lire le pseudo-code Ghidra sans lui faire aveuglément confiance

Commencez par la signature : type de retour, paramètres et convention d'appel structurent toute la fonction. Des noms comme param_1, local_18, FUN_00401230 ou undefined8 indiquent un manque d'éléments, pas les identifiants du programme d'origine. Suivez la provenance, les transformations et l'utilisation de chaque valeur.

Repérez ensuite conditions, boucles, appels, accès mémoire et chemins de retour. Ouvrez une fonction appelée, revenez avec l'historique de navigation et examinez les références avant de lui attribuer un rôle. Le surlignage croisé relie une expression aux instructions exactes.

Les optimisations peuvent rendre une expression simple complexe ou fusionner plusieurs opérations dans une sortie trop propre. Vérifiez dans Listing la direction des branches, les constantes, le signe, l'arithmétique des pointeurs et les effets de bord.

IndiceSens probableÀ vérifier
param_1 / local_10Paramètre ou variable inconnueUsages, pile, appelants
FUN_...Fonction sans nomAppelants, chaînes, imports
undefined4 / undefined8Taille connue, type incertainRegistres, conversions, mémoire
goto / boucle étrangeFlux de contrôle reconstruitCibles et Function Graph
nombreuses conversionsConflit de type ou signatureSigne, pointeur, prototype
AMÉLIORER

Améliorer la sortie avec noms, signatures et types

La qualité augmente quand le projet contient de meilleurs faits. Renommez une fonction seulement si appels, chaînes, imports ou flux de données soutiennent son rôle. Nommez les variables selon leur responsabilité et utilisez les commentaires pour consigner preuves et incertitudes.

Une mauvaise signature propage des conversions et calculs de pointeurs trompeurs chez tous les appelants. Corrigez retour, paramètres et convention d'appel. Appliquez structures, énumérations, tableaux et pointeurs lorsque des décalages ou constantes récurrents les justifient.

Effectuez une modification étayée à la fois puis examinez les appelants. Cette discipline permet d'annuler rapidement une hypothèse séduisante mais fausse.

  1. 1

    Renommer les symboles stables

    Utilisez un nom descriptif uniquement quand les preuves visibles soutiennent le rôle.

  2. 2

    Corriger le prototype

    Réglez retour, paramètres, convention et profondeur de pointeur avant les variables locales.

  3. 3

    Appliquer des types réutilisables

    Créez structures et énumérations pour des décalages ou constantes récurrents.

  4. 4

    Contrôler les appelants

    Vérifiez que la nouvelle signature clarifie les fonctions voisines sans contradiction.

VÉRIFIER

Confirmer les conclusions dans Listing et Function Graph

Listing fournit les instructions et données adresse par adresse. Utilisez-le pour confirmer quelle comparaison pilote une branche, si une valeur est signée, où revient un appel et si une écriture mémoire se produit avant ou après un contrôle.

Function Graph aide avec les conditions imbriquées, retours précoces et boucles. Suivez les arêtes vraies et fausses, repérez les blocs communs, puis revenez au décompilateur pour résumer chaque chemin clairement.

Pour une découverte importante, notez l'adresse de la fonction, l'instruction ou le bloc décisif, les références pertinentes et votre niveau de confiance. Ces preuves restent utiles si les types modifient ensuite l'affichage.

Function Graph Ghidra utilisé pour vérifier les branches du décompilateur
Capture officielle : Function Graph expose les blocs derrière les conditions et boucles.
DÉPANNAGE

Pourquoi la décompilation paraît incorrecte ou incomplète

Une mauvaise sortie vient souvent d'informations d'analyse manquantes. Vérifiez langue processeur, spécification du compilateur, carte mémoire, base d'image, limites de fonction, signature et résultats des analyseurs avant de conclure à une panne du décompilateur.

Obfuscation, code empaqueté, assembleur manuel, appels indirects, exceptions, optimisation agressive et code automodifiable limitent la récupération. Réduisez alors la question à une branche, une structure ou un appelant plutôt que d'attendre un source propre pour tout le programme.

SymptômeCause probableContrôle suivant
Aucune fonctionLimites non définiesRéférences et désassemblage
Instructions incohérentesMauvaise langue ou baseImportation et carte mémoire
Trop de conversionsSignature ou types erronésPrototype, signe, pointeurs
Appels manquantsFlux indirect ou analyse incomplèteXRefs et sites d'appel
Pseudo-code très complexeOptimisation ou obfuscationPetites zones et Function Graph
PRATIQUE

Un exercice reproductible de 20 minutes

Utilisez un programme à vous, un binaire libre, un exercice pédagogique ou un fichier que vous êtes autorisé à analyser. Importez-le dans un laboratoire isolé, lancez Auto Analysis, trouvez une chaîne de succès ou d'erreur et expliquez la fonction décisive avec vos propres mots.

Renommez uniquement les symboles justifiés, corrigez une signature ou un type, comparez la condition essentielle dans Listing et utilisez Function Graph si le flux est ambigu. Terminez par une conclusion et les adresses qui la prouvent. Automatisez ensuite avec PyGhidra.

Consultez l'aide officielle Decompiler. Installez la version vérifiée avec le guide d'installation de Ghidra et sauvegardez les projets avant une mise à niveau.

  • 0–5 minutes : trouver une chaîne, un import, un symbole ou une adresse fiable.
  • 5–10 minutes : lire entrées, appels, conditions, écritures et retour.
  • 10–15 minutes : améliorer un nom, une signature ou un type avec des preuves.
  • 15–20 minutes : vérifier le chemin décisif et noter la conclusion.
QUESTIONS FRÉQUENTES

FAQ sur le décompilateur Ghidra

Ghidra récupère-t-il le code source original ?

Non. Il produit un pseudo-code proche du C à partir du code machine et des données d'analyse. Noms, commentaires, types et structure exacte sont généralement perdus.

Comment ouvrir la fenêtre Decompiler ?

Ouvrez un programme dans CodeBrowser, choisissez Window > Decompiler si le panneau est masqué, puis sélectionnez une fonction définie dans Listing ou Symbol Tree.

Pourquoi Ghidra affiche-t-il undefined8 et beaucoup de conversions ?

La taille est connue mais le type manque de preuves, ou la signature est fausse. Contrôlez appelants, registres, signe, profondeur des pointeurs et décalages répétés.

Ghidra peut-il décompiler du C++ ?

Il peut analyser du code natif issu du C++, mais modèles, classes, exceptions, inlining, optimisation et symboles supprimés éloignent le résultat du source.

Faut-il faire confiance à Decompiler ou à Listing ?

Aux deux. Decompiler accélère la compréhension ; Listing fournit les preuves par adresse pour confirmer branches, appels, constantes, mémoire et effets de bord.