Ghidra Downloadguia independente de download e instalação
Português
GUIA DO DESCOMPILADOR DO GHIDRA

Como usar o descompilador do Ghidra

O descompilador do Ghidra transforma uma função de código de máquina selecionada em pseudocódigo semelhante a C. Ele facilita a leitura de parâmetros, condições, loops e chamadas, mas conclusões importantes devem ser verificadas no Listing, pois a saída é uma interpretação e não o código-fonte recuperado.

Documentação oficial do descompilador
NívelIniciante a intermediário
MétodoAnálise estática
Ghidra12.1.2
Verificado30 de julho de 2026
RESPOSTA RÁPIDA

O que o descompilador do Ghidra faz e o que não recupera

O Ghidra analisa instruções, fluxo de controle, convenções de chamada, símbolos e tipos para representar uma função como pseudocódigo legível. O Decompiler ajuda a encontrar ramificações, loops, argumentos, valores de retorno e relações entre funções chamadoras e chamadas.

A saída não é o C ou C++ original. A compilação remove nomes e tipos, combina expressões, reorganiza operações e incorpora funções. Trate nomes, tipos e expressões como hipóteses. Uma conclusão confiável também deve fazer sentido nas instruções do Listing e nas referências próximas.

Esta página é focada no Decompiler. Para criar um projeto, importar um arquivo, executar Auto Analysis e aprender o CodeBrowser, comece pelo tutorial do Ghidra para iniciantes.

Modelo mental correto

Use o pseudocódigo como um mapa legível do comportamento da máquina, não como prova do código-fonte original.

COMEÇAR

Abrir o Decompiler e sincronizar com o Listing

Abra o programa no CodeBrowser depois que Auto Analysis terminar. Se o painel estiver oculto, escolha Window > Decompiler. Selecione uma função definida no Listing ou Symbol Tree; o pseudocódigo deve mudar para essa função e destacar a instrução correspondente.

Comece por uma referência confiável: string exclusiva, chamada de API importada, símbolo exportado, mensagem de erro ou ponto de entrada conhecido. Siga as referências até a função chamadora e espere a análise em segundo plano terminar.

Se não houver função, defina os limites somente quando o disassembly e as referências sustentarem essa decisão. Linguagem de processador ou image base incorretas exigem corrigir primeiro a importação.

  1. 1

    Escolher uma referência

    Encontre uma string, símbolo, importação ou endereço ligado ao comportamento estudado.

  2. 2

    Seguir a referência

    Abra a função que usa o item e confirme o mesmo local em Listing, Symbol Tree e Decompiler.

  3. 3

    Aguardar a análise

    Depois leia entradas, chamadas, condições, gravações e valor de retorno.

Interface oficial do Ghidra CodeBrowser para selecionar funções
Interface oficial: o CodeBrowser reúne Listing, símbolos e contexto do descompilador.
INTERPRETAR

Como ler o pseudocódigo do Ghidra sem confiar demais

Leia primeiro a assinatura: retorno, parâmetros e convenção de chamada determinam toda a função. Nomes como param_1, local_18, FUN_00401230 e undefined8 significam que faltam evidências, não que esses eram os identificadores originais. Acompanhe a origem, as mudanças e o uso de cada valor.

Depois identifique condições, loops, chamadas, acessos à memória e caminhos de retorno. Abra funções chamadas, volte pelo histórico de navegação e consulte referências antes de atribuir um propósito. O destaque cruzado liga cada expressão às instruções exatas.

Otimizações podem tornar uma expressão simples complexa ou esconder várias operações em uma saída limpa demais. Confirme no Listing a direção dos saltos, constantes, sinal, aritmética de ponteiros e efeitos colaterais.

IndícioSignificado provávelO que verificar
param_1 / local_10Parâmetro ou variável desconhecidaUsos, pilha e chamadores
FUN_...Função sem nomeChamadores, strings e imports
undefined4 / undefined8Tamanho conhecido, tipo incertoRegistradores, casts e memória
goto / loop estranhoFluxo reconstruídoDestinos e Function Graph
muitos castsConflito de tipo ou assinaturaSinal, ponteiro e protótipo
MELHORAR

Melhorar a saída com nomes, assinaturas e tipos

A qualidade melhora quando o projeto contém fatos melhores. Renomeie uma função somente quando chamadas, strings, imports ou fluxo de dados comprovarem seu papel. Nomeie variáveis pela responsabilidade e use comentários para registrar evidências e incertezas.

Uma assinatura errada espalha casts e aritmética de ponteiros enganosos por todos os chamadores. Corrija retorno, parâmetros e convenção de chamada. Aplique estruturas, enums, arrays e ponteiros quando offsets ou constantes recorrentes justificarem esses tipos.

Faça uma mudança comprovada por vez e revise os chamadores. Assim fica mais fácil desfazer uma hipótese atraente, mas incorreta.

  1. 1

    Renomear símbolos estáveis

    Use nomes descritivos apenas quando a evidência visível apoiar a função.

  2. 2

    Corrigir o protótipo

    Ajuste retorno, parâmetros, convenção e profundidade de ponteiro antes das variáveis locais.

  3. 3

    Aplicar tipos reutilizáveis

    Crie estruturas e enums para offsets e constantes repetidos.

  4. 4

    Revisar chamadores

    Verifique se a nova assinatura esclarece funções próximas sem contradições.

VERIFICAR

Confirmar conclusões no Listing e Function Graph

O Listing registra instruções e dados por endereço. Use-o para confirmar qual comparação controla uma ramificação, se o valor tem sinal, onde uma chamada retorna e se uma gravação ocorre antes ou depois de uma verificação.

Function Graph ajuda com condições aninhadas, retornos antecipados e loops. Siga as arestas verdadeiras e falsas, identifique blocos compartilhados e volte ao Decompiler para explicar cada caminho de forma curta.

Em descobertas importantes, registre endereço da função, instrução ou bloco decisivo, referências e grau de confiança. Essas evidências continuam úteis quando tipos posteriores mudam a aparência do pseudocódigo.

Function Graph do Ghidra usado para verificar ramificações do Decompiler
Captura oficial: Function Graph mostra os blocos por trás de condições e loops.
SOLUÇÃO DE PROBLEMAS

Por que a descompilação parece errada ou incompleta

Uma saída ruim normalmente indica dados de análise ausentes. Verifique linguagem do processador, compiler specification, mapa de memória, image base, limites da função, assinatura e resultados dos analisadores antes de culpar o Decompiler.

Ofuscação, código empacotado, assembly manual, chamadas indiretas, exceções, otimização agressiva e código automodificável limitam a recuperação. Reduza a pergunta a uma ramificação, estrutura ou chamador em vez de esperar código limpo para o programa inteiro.

SintomaCausa provávelPróxima verificação
Sem funçãoLimites não definidosReferências e disassembly
Instruções sem sentidoLinguagem ou base erradaImportação e mapa de memória
Casts demaisAssinatura ou tipos erradosProtótipo, sinal e ponteiros
Chamadas ausentesFluxo indireto ou análise incompletaXRefs e locais de chamada
Pseudocódigo muito complexoOtimização ou ofuscaçãoTrechos menores e Function Graph
PRÁTICA

Fluxo repetível de prática em 20 minutos

Use um programa próprio, binário de código aberto, desafio educativo ou arquivo que você tenha autorização para analisar. Importe em um laboratório isolado, execute Auto Analysis, encontre uma string de sucesso ou erro e explique a função decisiva com suas palavras.

Renomeie apenas símbolos justificáveis, corrija uma assinatura ou tipo, compare a condição principal no Listing e use Function Graph se o fluxo estiver confuso. Termine com uma conclusão e os endereços que a sustentam. Depois avance para a automação com PyGhidra.

Consulte a ajuda oficial do Decompiler. Instale a versão verificada com o guia de instalação do Ghidra e faça backup dos projetos antes de atualizar.

  • 0–5 minutos: encontrar string, import, símbolo ou endereço confiável.
  • 5–10 minutos: ler entradas, chamadas, condições, gravações e retorno.
  • 10–15 minutos: melhorar um nome, assinatura ou tipo com evidências.
  • 15–20 minutos: verificar o caminho decisivo e registrar a conclusão.
PERGUNTAS FREQUENTES

FAQ do descompilador do Ghidra

O Ghidra recupera o código-fonte original?

Não. Ele gera pseudocódigo semelhante a C a partir do código de máquina e da análise. Nomes, comentários, tipos e estrutura exata normalmente foram perdidos.

Como abrir a janela Decompiler?

Abra um programa no CodeBrowser, escolha Window > Decompiler se o painel estiver oculto e selecione uma função definida no Listing ou Symbol Tree.

Por que aparecem undefined8 e muitos casts?

O tamanho é conhecido, mas o tipo não tem evidência suficiente, ou a assinatura está errada. Revise chamadores, registradores, sinal, ponteiros e offsets repetidos.

O Ghidra consegue descompilar C++?

Ele analisa código nativo gerado de C++, mas templates, classes, exceções, inlining, otimização e símbolos removidos reduzem a semelhança com o fonte.

Devo confiar no Decompiler ou no Listing?

Use os dois. O Decompiler acelera a compreensão; o Listing fornece evidência por endereço para confirmar ramificações, chamadas, constantes, memória e efeitos colaterais.