Choisir l'outil selon l'indice
Pour rechercher des chaînes dans Ghidra, déterminez d'abord si vous cherchez des données déjà définies par Ghidra, du texte visible dans le modèle du programme, des octets bruts en mémoire chargée ou une adresse exacte. Defined Strings est un bon inventaire, mais ce n'est pas une recherche exhaustive. Une chaîne courte peut ne pas être définie, une valeur Unicode peut employer une autre représentation et un bloc hors du périmètre courant peut ne pas apparaître dans la même fenêtre.
Pour les adresses, gardez Listing comme référence principale. Utilisez Decompiler pour expliquer une fonction après avoir trouvé l'élément probant, et non pour remplacer la recherche. La documentation officielle pour débutants présente le flux CodeBrowser plus large ; cette page se concentre sur les choix de recherche qui posent problème au début.
N'examinez que des logiciels et systèmes pour lesquels vous avez une autorisation. Un résultat de recherche décrit un fichier ; il ne constitue ni une autorisation de rétro-ingénierie ni une garantie de sécurité.
- Texte connu : commencez par Defined Strings ou Search for Strings, puis vérifiez les références.
- Nom, symbole, fonction ou commentaire : utilisez Search Program Text ou Symbol Tree.
- Adresse précise : utilisez Go To et confirmez le bloc chargé et l'instruction.
- Séquence d'octets ou motif : utilisez Search Memory avec le bon périmètre.
- Fonction utilisatrice : suivez les XREF et comparez Listing, Function Graph et Decompiler.
Rechercher les chaînes avant de deviner dans le décompilateur
Si vous connaissez un message, une URL, un chemin, une commande ou un fragment d'erreur, recherchez le texte avant de lire des centaines de fonctions. Ouvrez Defined Strings pour obtenir l'inventaire des chaînes déjà reconnues. Si la valeur manque, utilisez la recherche de chaînes et vérifiez l'encodage, la longueur minimale, l'alignement, la terminaison nulle et les blocs mémoire concernés. Une recherche vide signifie souvent que la définition ou le périmètre ne correspondent pas.
Un résultat n'est utile qu'après vérification de son adresse. Ouvrez-le dans Listing, examinez les octets et les données voisines, puis confirmez qu'il se trouve dans un bloc chargé. Si Ghidra affiche des données indéfinies, vérifiez l'alignement et les références proches avant de les définir. Conservez une copie du projet avant toute définition en série.
- 1
Commencer par un indice distinctif
Une URL complète, un fragment distinctif ou une extension rare produit moins de faux positifs qu'un terme courant ou un nom d'initialisation.
Defined Strings / Search for Strings - 2
Vérifier l'encodage et le périmètre
Essayez ASCII, UTF-8, UTF-16 ou l'encodage adapté, puis confirmez si la recherche porte sur les blocs chargés, tous les blocs ou la sélection.
Encodage + périmètre mémoire - 3
Ouvrir l'adresse dans Listing
Inspectez les octets, le type de donnée, les chaînes voisines et les références. Un surlignage ne prouve pas encore la fonction pertinente.
Open in Listing - 4
Suivre une première référence utile
Passez par References ou XREF vers une comparaison, un appel, un formatage ou une branche qui donne un rôle à la chaîne.
References / Show XRefs

Trouver où la chaîne est utilisée et pourquoi
Trouver une URL ou un message est généralement le milieu de l'enquête. Sélectionnez l'élément et examinez ses références. Une URL peut être transmise à une routine réseau, comparée à une valeur locale ou rester une ressource inutilisée. Un message peut appartenir à une erreur, une vérification de licence, un menu ou une branche de débogage. L'adresse de référence indique où la valeur est consommée ; le contexte des appels indique son rôle.
Lorsqu'une référence mène à une fonction complexe, passez de Listing à Decompiler. Listing montre les instructions et adresses décodées ; Decompiler propose un flux de contrôle et un modèle de variables. Ne renommez qu'après avoir réuni assez d'indices et séparez les observations des hypothèses.
- Confirmez qu'il s'agit d'une vraie référence de code ou de données, pas d'une simple proximité d'adresse.
- Lisez le bloc de base et repérez la comparaison, l'appel ou le formatage.
- Vérifiez appelants et appelées avant d'attribuer un sens métier.
- Utilisez Function Graph lorsque les branches sont difficiles à suivre dans Listing.
- Consultez le guide Decompiler si le problème restant concerne le pseudocode.
Trouver une adresse mémoire, une valeur ou un motif d'octets
Une question comme « où se trouve 0x00421A3F ? » est d'abord un problème de navigation. Utilisez Go To, puis vérifiez le programme, le bloc mémoire, le langage et l'espace d'adresses affichés dans Listing. Les offsets de fichier, adresses virtuelles, bases d'image et adresses relocalisées ne sont pas interchangeables. Si une adresse copiée n'ouvre rien, identifiez son origine : offset, trace de débogueur, journal ou module relocalisé.
Pour les données brutes, Search Memory convient mieux qu'une recherche textuelle. Recherchez les octets dans le bon ordre, tenez compte de l'endianness et réduisez le bloc ou la sélection si les résultats sont nombreux. Une valeur peut se trouver dans du code, des données, du remplissage ou une structure sans rapport. La recherche produit des candidats ; les octets voisins et les références donnent le contexte.
Un débogueur, un lecteur de fichier et Ghidra peuvent utiliser des systèmes de coordonnées différents. Conservez l'origine de l'adresse et traduisez-la explicitement au lieu d'ajouter une constante jusqu'à obtenir une valeur plausible.
| Indice | Premier outil | Vérification suivante |
|---|---|---|
| Adresse chargée exacte | Go To | Espace d'adresses, bloc, instruction ou donnée |
| Séquence hexadécimale | Search Memory | Endianness, alignement, périmètre, références |
| URL ou message | Recherche de chaînes | Encodage, définition, XREF, fonction utilisatrice |
| Nom ou étiquette | Symbol Tree / Search Program Text | Espace de noms, type, appelants et appelées |
| Valeur issue d'un journal ou débogueur | Go To + Listing | Rebase, base du module, offset contre adresse |
Rechercher des instructions et des motifs d'instructions
Une recherche d'instructions demande une question plus précise que « trouver ce mot ». Vous pouvez chercher un mnémonique, un registre, une constante, une séquence ou les octets produits par un compilateur. Search Program Text aide lorsque le texte décodé dans Listing est stable ; Search Memory convient lorsque l'encodage est l'indice stable. L'architecture et le langage d'importation déterminent le décodage des mêmes octets, donc vérifiez-les avant de comparer.
Pour les instructions Java ou d'autres termes liés à une plateforme, ne mélangez pas le vocabulaire du langage source et la syntaxe désassemblée. Recherchez la représentation réellement visible dans Listing, puis validez un résultat avec ses opérandes et son flux de contrôle. Pour un motif répétable, notez l'architecture, l'endianness, les jokers et le périmètre mémoire.
- 1
Définir le motif
Notez le mnémonique, les opérandes, les octets, les registres ou les constantes et séparez les parties variables.
Motif = mnémonique + opérandes + jokers - 2
Choisir le texte ou les octets
Utilisez le texte quand la forme décodée est stable et les octets quand l'encodage est la preuve stable.
Search Program Text / Search Memory - 3
Valider le résultat
Ouvrez le résultat, lisez l'instruction et son bloc, puis comparez références et appelants.
Listing + XREF + Function Graph

Trouver les fonctions, les fonctions indéfinies et les limites utiles
Lorsqu'un résultat pointe vers du code, utilisez Symbol Tree, Function Window ou le contexte de Listing pour voir si Ghidra a déjà reconnu une fonction. « Undefined » peut signifier que l'analyse n'a pas encore créé la limite, que l'adresse est une donnée ou que l'architecture importée doit être revue. Ne créez pas une fonction parce qu'une séquence semble familière : vérifiez le point d'entrée, les références, la convention d'appel et le retour lorsque c'est possible.
Dans un flux guidé par la recherche, la fonction organise les éléments probants sans constituer une conclusion sur le comportement. Notez l'adresse, la donnée ou l'instruction trouvée, la référence qui les relie et la fonction qui consomme ensuite la valeur. Le tutoriel pour débutants présente le flux Auto Analysis et Function Graph plus global.
| Résultat | Interprétation | Étape prudente |
|---|---|---|
| Fonction nommée | Ghidra a créé une limite symbolique | Vérifier appelants, appelées, signature et références |
| FUN_... ou fonction sans nom | La fonction existe mais son rôle est inconnu | S'appuyer sur chaînes, appels et flux avant de renommer |
| Adresse indéfinie | Pas encore de limite fiable | Vérifier code/donnée et analyser une copie |
| Résultat dans un bloc | L'indice se trouve près du code ou des données | Lire le bloc entier et suivre les XREF |
| Aucune référence | Usage indirect ou définition incomplète | Vérifier pointeurs, relocation et périmètre |
Corriger les recherches sans résultat ou trop larges
L'échec le plus fréquent vient d'un décalage entre l'indice et sa représentation dans le programme. Une URL peut être découpée, encodée, compressée, stockée en UTF-16 ou construite à l'exécution. Une adresse peut appartenir à une autre base de module. Un motif d'instructions peut changer parce que le compilateur choisit un autre registre. Changez une seule variable à la fois et gardez l'indice avec les paramètres utilisés.
Si les résultats sont trop nombreux, réduisez le bloc, la sélection, le type, la longueur minimale, le langage ou la plage d'adresses. S'il n'y a aucun résultat, élargissez une contrainte, inspectez les octets voisins, essayez un autre encodage et vérifiez que la mémoire est chargée. Pour une différence de version, consultez l'aide officielle actuelle plutôt qu'un ancien chemin de menu.
| Symptôme | Cause probable | Vérification suivante |
|---|---|---|
| Aucune chaîne | Encodage, chaîne courte ou donnée indéfinie | Tester l'encodage et inspecter les octets |
| Trop de résultats | Mot courant ou périmètre large | Choisir un fragment distinctif et limiter les blocs |
| Adresse inaccessible | Offset, rebase ou espace différent | Identifier le système de coordonnées et la base |
| Pas de XREF | Usage indirect ou table de pointeurs | Inspecter les pointeurs proches et l'analyse ciblée |
| Instruction absente | Syntaxe, architecture ou compilateur différent | Rechercher des octets ou un opérande stable |
| Decompiler diverge | Le pseudocode est une interprétation | Revenir à Listing, octets, références et Function Graph |
Questions sur la recherche dans Ghidra
Quelle est la manière la plus simple de rechercher des chaînes dans Ghidra ?
Commencez par Defined Strings pour l'inventaire, puis utilisez l'action de recherche lorsqu'une valeur manque ou que l'encodage est incertain. Vérifiez l'adresse dans Listing et suivez les XREF.
Comment trouver une adresse URL dans Ghidra ?
Recherchez un fragment distinctif de l'URL, confirmez son encodage et son adresse dans Listing, puis suivez les références jusqu'à la fonction qui la lit, la compare ou l'envoie. Elle peut être construite à l'exécution.
Comment rechercher une adresse mémoire précise dans Ghidra ?
Utilisez Go To, puis vérifiez l'espace d'adresses, le bloc et le contenu décodé. Traduisez les offsets de fichier et les adresses de débogueur avant de les considérer comme des adresses chargées.
Comment rechercher des instructions précises dans Ghidra ?
Utilisez Search Program Text lorsque le texte décodé est stable, ou Search Memory lorsque les octets sont stables. Confirmez l'architecture et l'endianness, puis validez dans Listing et Function Graph.
Pourquoi une recherche de chaînes Ghidra ne renvoie-t-elle rien ?
Vérifiez l'encodage, la longueur minimale, l'alignement, les blocs chargés et la possibilité que la valeur soit découpée ou construite à l'exécution. Élargissez une contrainte à la fois.
Faut-il utiliser Decompiler pour rechercher une chaîne ?
Recherchez généralement d'abord la chaîne ou les octets, puis utilisez Decompiler pour comprendre la fonction qui référence le résultat. Listing et les octets sont la preuve directe de la correspondance.