Escolha a ferramenta de acordo com a pista
Para pesquisar strings no Ghidra, decida primeiro se você procura dados já definidos pelo Ghidra, texto visível no modelo do programa, bytes brutos na memória carregada ou um endereço exato. Defined Strings é um bom inventário, mas não é uma pesquisa completa. Uma string curta pode ainda não estar definida, um valor Unicode pode usar outra codificação e um bloco fora do escopo atual pode não aparecer na mesma janela.
Para confirmar endereços, mantenha o Listing como fonte principal. Use o Decompiler para explicar uma função depois de encontrar a evidência, não para substituir a pesquisa. A documentação oficial para iniciantes apresenta o fluxo amplo do CodeBrowser; esta página se concentra nas decisões de pesquisa que mais confundem no início.
Analise somente software e sistemas que você tem autorização para examinar. Um resultado de pesquisa é uma evidência sobre um arquivo, não uma permissão para engenharia reversa nem uma garantia de segurança.
- Texto conhecido: comece com Defined Strings ou Search for Strings e confira as referências.
- Nome, símbolo, função ou comentário: use Search Program Text ou Symbol Tree.
- Endereço exato: use Go To e confirme o bloco carregado e a instrução.
- Sequência de bytes ou padrão: use Search Memory com o escopo correto.
- Função que usa o resultado: siga XREF e compare Listing, Function Graph e Decompiler.
Pesquise strings antes de tentar adivinhar no decompilador
Se você conhece uma mensagem, URL, caminho, comando ou trecho de erro, pesquise o texto antes de ler centenas de funções. Abra Defined Strings quando quiser um inventário das strings já reconhecidas. Se o valor não aparecer, use a ação de pesquisa de strings e confira codificação, tamanho mínimo, alinhamento, terminador nulo e escopo dos blocos de memória. Uma busca vazia muitas vezes indica um problema de definição ou de escopo, não a ausência do texto.
Um resultado só é útil depois que o endereço é verificado. Abra-o no Listing, confira os bytes e os dados próximos e confirme que está em um bloco carregado. Se o Ghidra mostrar dados indefinidos, confira alinhamento e referências próximas antes de defini-los. Faça grandes alterações somente em uma cópia do projeto.
- 1
Comece com uma pista específica
Uma URL completa, um trecho distintivo ou uma extensão rara gera menos falsos positivos do que um termo comum ou um nome de inicialização.
Defined Strings / Search for Strings - 2
Confira codificação e escopo
Teste ASCII, UTF-8, UTF-16 ou a codificação adequada e confirme se a pesquisa cobre blocos carregados, todos os blocos ou apenas a seleção.
Codificação + escopo de memória - 3
Abra o endereço no Listing
Inspecione bytes, tipo de dado, strings próximas e referências. Um destaque não prova qual é a função relevante.
Open in Listing - 4
Siga a primeira referência útil
Use References ou XREF para chegar a uma comparação, chamada, formatação ou ramificação que explique o papel da string.
References / Show XRefs

Descubra onde a string é usada e por que ela importa
Encontrar uma URL ou mensagem normalmente é apenas o meio da investigação. Selecione o item e examine suas referências. Uma URL pode ser passada para uma rotina de rede, comparada com um valor local ou permanecer como recurso sem uso. Uma mensagem pode pertencer a um erro, uma verificação de licença, um menu ou um ramo de depuração. O endereço da referência mostra onde o valor é consumido; chamadores e chamados ajudam a entender o papel.
Quando a referência levar a uma função complexa, alterne entre Listing e Decompiler. Listing mostra instruções e endereços decodificados; Decompiler propõe um fluxo de controle e um modelo de variáveis. Só renomeie quando houver evidência suficiente e separe o que foi observado do que foi inferido.
- Confirme que a referência é real, não apenas uma coincidência de endereço próximo.
- Leia o bloco básico e encontre comparação, chamada ou formatação.
- Confira chamadores e chamados antes de atribuir um significado ao código.
- Use Function Graph quando os ramos forem difíceis de seguir no Listing.
- Consulte o guia do Decompiler quando a dúvida restante for sobre pseudocódigo.
Encontre um endereço de memória, valor ou padrão de bytes
Uma pergunta como “onde está 0x00421A3F?” é primeiro um problema de navegação. Use Go To e depois confira programa, bloco de memória, linguagem e espaço de endereços exibidos no Listing. Offsets de arquivo, endereços virtuais, bases de imagem e endereços relocados não são equivalentes. Se um endereço copiado não abrir, descubra se veio de um offset, de uma trace do depurador, de um log ou de um módulo relocável.
Para dados brutos, Search Memory é mais adequado do que uma pesquisa textual. Pesquise os bytes na ordem correta, considere endianness e limite o bloco ou a seleção quando houver muitos resultados. Um valor pode estar em código, dados, preenchimento ou uma estrutura sem relação. A pesquisa cria candidatos; os bytes ao redor e as referências fornecem o contexto.
Um depurador, um visualizador de arquivos e o Ghidra podem usar sistemas de coordenadas diferentes. Preserve a origem do endereço e converta-o conscientemente em vez de somar uma constante até obter um valor plausível.
| Pista | Primeira ferramenta | O que verificar depois |
|---|---|---|
| Endereço carregado exato | Go To | Espaço, bloco, instrução ou dado no destino |
| Sequência hexadecimal | Search Memory | Endianness, alinhamento, escopo e referências |
| URL ou mensagem | Pesquisa de strings | Codificação, definição, XREF e função consumidora |
| Nome ou rótulo | Symbol Tree / Search Program Text | Namespace, tipo, chamadores e chamados |
| Valor de log ou depurador | Go To + Listing | Rebase, base do módulo e offset versus endereço |
Pesquise instruções e padrões de instruções
Uma pesquisa de instruções precisa de uma pergunta mais precisa do que “encontre esta palavra”. Você pode procurar um mnemônico, registrador, constante, sequência ou bytes produzidos pelo compilador. Search Program Text ajuda quando o texto decodificado no Listing é estável; Search Memory é melhor quando a codificação em bytes é a pista estável. A arquitetura e a linguagem escolhidas na importação determinam como os mesmos bytes são decodificados.
Para instruções Java ou termos específicos de uma plataforma, não misture vocabulário da linguagem-fonte com a sintaxe do disassembly. Pesquise a representação que aparece no Listing e valide um resultado pelos operandos e pelo fluxo de controle. Para repetir o padrão em vários arquivos, registre arquitetura, endianness, curingas e escopo de memória.
- 1
Defina o padrão
Anote mnemônico, operandos, bytes, registradores ou constantes e marque as partes que podem mudar entre compilações.
Padrão = mnemônico + operandos + curingas - 2
Escolha texto ou bytes
Use texto quando a forma decodificada for estável e memória quando a representação em bytes for a evidência estável.
Search Program Text / Search Memory - 3
Valide a ocorrência
Abra o resultado, leia a instrução completa e o bloco e compare referências e chamadores.
Listing + XREF + Function Graph

Encontre funções, funções indefinidas e limites úteis
Quando um resultado aponta para código, use Symbol Tree, Function Window ou o contexto atual do Listing para verificar se o Ghidra já reconheceu uma função. “Undefined” pode significar que a análise ainda não criou o limite, que o endereço é dado ou que a arquitetura importada precisa ser revisada. Não crie uma função apenas porque uma sequência parece familiar: confira entrada, referências, convenção de chamada e retorno quando possível.
Em um fluxo guiado por pesquisa, a função organiza as evidências, mas não é uma conclusão sobre o comportamento. Registre endereço, dado ou instrução encontrada, referência que os conecta e próxima função que consome o valor. O tutorial para iniciantes cobre o fluxo maior de Auto Analysis e Function Graph.
| Resultado | Interpretação | Próximo passo seguro |
|---|---|---|
| Função nomeada | Existe um limite simbólico | Verifique chamadores, chamados, assinatura e referências |
| FUN_... ou função sem nome | A função existe, mas o papel é desconhecido | Use strings, chamadas e fluxo antes de renomear |
| Endereço indefinido | Ainda não há um limite confiável | Confira código/dado e analise uma cópia |
| Resultado dentro de um bloco | A pista está perto de código ou dados | Leia o bloco completo e siga XREF |
| Sem referências | Uso indireto ou definição incompleta | Confira tabelas de ponteiros, relocação e escopo |
Corrija buscas sem resultado ou com resultados demais
O erro mais comum é uma diferença entre a pista e sua representação no programa. Uma URL pode estar dividida, codificada, comprimida, armazenada como UTF-16 ou montada em tempo de execução. Um endereço pode pertencer a outra base de módulo. Um padrão de instrução pode mudar porque o compilador escolheu outro registrador. Mude uma variável por vez e mantenha a pista original junto das configurações.
Quando há muitos resultados, limite bloco, seleção, tipo de dado, tamanho mínimo, linguagem ou faixa de endereços. Quando não há resultados, amplie uma restrição, confira bytes adjacentes, tente outra codificação e verifique se a memória foi carregada. Para diferenças de versão, consulte a ajuda oficial atual em vez de copiar um caminho de menu antigo.
| Sintoma | Causa provável | Próxima verificação |
|---|---|---|
| Nenhuma string encontrada | Codificação, string curta ou dado indefinido | Teste a codificação e confira os bytes |
| Resultados demais | Palavra comum ou escopo amplo | Use um trecho específico e limite os blocos |
| Endereço não abre | Offset, rebase ou espaço incorreto | Identifique o sistema de coordenadas e a base |
| String sem XREF | Uso indireto ou tabela de ponteiros | Confira ponteiros próximos e análise focada |
| Instrução não aparece | Sintaxe, arquitetura ou compilador diferente | Pesquise bytes ou operando estável |
| Decompiler diverge | Pseudocódigo é uma interpretação | Volte a Listing, bytes, referências e Function Graph |
Perguntas sobre pesquisa no Ghidra
Qual é a forma mais simples de pesquisar strings no Ghidra?
Comece com Defined Strings para obter um inventário e use a pesquisa de strings quando o valor não aparecer ou a codificação for incerta. Verifique o endereço no Listing e siga XREF.
Como encontro um endereço URL no Ghidra?
Pesquise um trecho distintivo da URL, confirme codificação e endereço no Listing e siga referências até a função que lê, compara, formata ou envia o valor. A URL pode ser montada em tempo de execução.
Como pesquiso um endereço de memória específico no Ghidra?
Use Go To e confirme espaço de endereços, bloco e conteúdo decodificado. Converta offsets de arquivo ou endereços do depurador antes de tratá-los como endereços carregados.
Como pesquiso instruções específicas no Ghidra?
Use Search Program Text para texto decodificado estável ou Search Memory para bytes estáveis. Confirme arquitetura e endianness e valide os resultados no Listing e no Function Graph.
Por que a pesquisa de strings do Ghidra não encontra nada?
Confira codificação, tamanho mínimo, alinhamento, blocos carregados e se o valor está dividido ou é criado em tempo de execução. Amplie uma condição por vez.
Devo usar o Decompiler para pesquisar uma string?
Normalmente pesquise primeiro a string ou os bytes e use o Decompiler para entender a função que referencia o resultado. Listing e bytes são a evidência direta da ocorrência.