Ghidra Downloadguía independiente de descarga e instalación
Español
GUÍA DEL DESCOMPILADOR DE GHIDRA

Cómo usar el descompilador de Ghidra

El descompilador de Ghidra convierte una función de código máquina seleccionada en pseudocódigo parecido a C. Sirve para entender parámetros, condiciones, bucles y llamadas con rapidez, pero las conclusiones importantes deben comprobarse en Listing porque el resultado es una interpretación, no el código fuente recuperado.

Documentación oficial del descompilador
NivelInicial a intermedio
FlujoAnálisis estático
Ghidra12.1.2
Verificado30 de julio de 2026
RESPUESTA RÁPIDA

Qué hace el descompilador de Ghidra y qué no puede recuperar

Ghidra analiza instrucciones, flujo de control, convenciones de llamada, símbolos y tipos de datos para representar una función como pseudocódigo legible. El descompilador ayuda a localizar decisiones, bucles, argumentos, valores de retorno y relaciones entre funciones que llaman y funciones llamadas.

El resultado no es el C o C++ original. La compilación elimina nombres y tipos, combina expresiones, reorganiza operaciones e inserta funciones. Por eso cada nombre, tipo o expresión debe tratarse como una hipótesis. Una conclusión sólida también debe encajar con las instrucciones de Listing y con las referencias cercanas.

Esta página se concentra en Decompiler. Para crear un proyecto, importar un archivo, ejecutar Auto Analysis y aprender CodeBrowser, empieza por el tutorial de Ghidra para principiantes.

Modelo mental útil

Usa el pseudocódigo como un mapa legible del comportamiento del código máquina, no como prueba del fuente original.

INICIO

Abrir Decompiler y sincronizarlo con Listing

Abre el programa en CodeBrowser cuando Auto Analysis haya terminado. Si no ves el panel, selecciona Window > Decompiler. Al elegir una función definida en Listing o Symbol Tree, el pseudocódigo debe cambiar a esa función y resaltar la sentencia relacionada con la instrucción seleccionada.

Empieza desde una referencia fiable: una cadena única, una llamada importada, un símbolo exportado, un mensaje de error o un punto de entrada conocido. Sigue las referencias hasta la función llamadora y espera a que finalice la descompilación antes de valorar el resultado.

Si aparece que no existe una función, define sus límites solo cuando el desensamblado y las referencias lo respalden. Si el lenguaje del procesador o la base de imagen son incorrectos, corrige primero la importación.

  1. 1

    Elegir un ancla

    Busca una cadena, símbolo, importación o dirección relacionada con el comportamiento que quieres explicar.

  2. 2

    Seguir la referencia

    Abre la función que usa el ancla y confirma que Listing, Symbol Tree y Decompiler apuntan al mismo lugar.

  3. 3

    Esperar al análisis

    Deja terminar las tareas en segundo plano y después lee la función desde sus entradas hasta el retorno.

Interfaz oficial de Ghidra CodeBrowser para seleccionar funciones
Captura oficial: CodeBrowser mantiene juntos Listing, símbolos y el contexto del descompilador.
INTERPRETAR

Cómo leer el pseudocódigo de Ghidra sin confiar ciegamente

Lee primero la firma: tipo de retorno, parámetros y convención de llamada condicionan toda la función. Nombres como param_1, local_18, FUN_00401230 o undefined8 indican que faltan pruebas, no que el programa original utilizara esos identificadores. Sigue el origen, los cambios y el destino de cada valor.

Después identifica condiciones, bucles, llamadas, accesos a memoria y rutas de retorno. Abre una función llamada con doble clic, vuelve con el historial de navegación y revisa las referencias antes de decidir para qué sirve una llamada.

La optimización puede volver complicada una expresión sencilla o hacer que varias operaciones parezcan demasiado limpias. Comprueba en Listing la dirección de los saltos, constantes, signo de los valores, aritmética de punteros y efectos secundarios.

PistaSignificado probableQué comprobar
param_1 / local_10Parámetro o local desconocidoUsos, pila y llamadores
FUN_...Función sin nombreLlamadores, cadenas e importaciones
undefined4 / undefined8Tamaño conocido, tipo inciertoRegistros, conversiones y memoria
goto o bucle extrañoFlujo recuperadoSaltos y Function Graph
muchas conversionesTipos o firma incorrectosSigno, punteros y prototipo
MEJORAR

Mejorar el resultado con nombres, firmas y tipos de datos

La calidad aumenta cuando el proyecto contiene datos más precisos. Cambia el nombre de una función solo si llamadas, cadenas, importaciones o flujo de datos respaldan su función. Nombra variables por su responsabilidad y utiliza comentarios para registrar pruebas o dudas, no para repetir el pseudocódigo.

Una firma incorrecta propaga conversiones y aritmética de punteros engañosas a todos los llamadores. Corrige el retorno, los parámetros y la convención de llamada. Aplica estructuras, enumeraciones, matrices y punteros cuando los mismos desplazamientos o constantes se repitan con coherencia.

Haz un cambio respaldado por pruebas cada vez y revisa las funciones llamadoras. Así puedes detectar pronto una suposición atractiva pero incorrecta.

  1. 1

    Renombrar símbolos estables

    Utiliza nombres parciales y descriptivos solo cuando la evidencia visible respalde ese papel.

  2. 2

    Corregir el prototipo

    Ajusta retorno, parámetros, convención de llamada y profundidad de puntero antes de pulir variables locales.

  3. 3

    Aplicar tipos reutilizables

    Crea estructuras y enumeraciones cuando los mismos desplazamientos o valores aparezcan en varias funciones.

  4. 4

    Revisar llamadores

    Comprueba que la nueva firma aclara funciones cercanas sin crear contradicciones.

VERIFICAR

Comprobar las conclusiones en Listing y Function Graph

Listing conserva las instrucciones y datos por dirección. Úsalo para confirmar qué comparación controla un salto, si un valor tiene signo, dónde vuelve una llamada y si una escritura ocurre antes o después de una comprobación. El resaltado cruzado facilita relacionar pseudocódigo e instrucciones.

Function Graph resulta útil con condiciones anidadas, retornos tempranos y bucles. Sigue las aristas verdaderas y falsas, identifica bloques compartidos y vuelve al descompilador para resumir cada ruta en lenguaje claro.

En hallazgos importantes, anota la dirección de la función, la instrucción o bloque decisivo, las referencias relevantes y tu nivel de confianza. Esa evidencia seguirá siendo útil aunque cambien los tipos y la presentación.

Function Graph de Ghidra para verificar saltos del pseudocódigo
Captura oficial: Function Graph muestra los bloques de control que hay detrás de condiciones y bucles.
SOLUCIÓN DE PROBLEMAS

Por qué la descompilación se ve incorrecta o incompleta

Un mal resultado suele indicar que faltan datos de análisis. Revisa lenguaje del procesador, especificación del compilador, mapa de memoria, base de imagen, límites de función, firma y resultados de los analizadores antes de culpar al descompilador.

La ofuscación, código empaquetado, ensamblador manual, llamadas indirectas, excepciones, optimización agresiva y funciones automodificables limitan la recuperación. Reduce la pregunta a un salto, una estructura o un llamador en lugar de esperar código limpio para todo el programa.

SíntomaCausa probableSiguiente revisión
No hay funciónLímites sin definirReferencias y desensamblado
Instrucciones absurdasLenguaje o base incorrectosImportación y mapa de memoria
Demasiadas conversionesFirma o tipos erróneosPrototipo, signo y punteros
Faltan llamadasFlujo indirecto o análisis incompletoXRefs y sitios de llamada
Pseudocódigo muy complejoOptimización u ofuscaciónFragmentos menores y Function Graph
PRÁCTICA

Flujo repetible de práctica en 20 minutos

Usa un programa propio, un binario de código abierto, un reto educativo o un archivo que tengas permiso para analizar. Impórtalo en un laboratorio aislado, ejecuta Auto Analysis, localiza una cadena de éxito o error, sigue su referencia y explica la función decisiva con palabras sencillas.

Renombra solo símbolos justificables, corrige una firma o un tipo, compara la condición principal en Listing y usa Function Graph si el flujo no está claro. Termina con una conclusión y las direcciones que la respaldan. Repite el proceso antes de automatizar con PyGhidra.

Consulta la ayuda oficial de Decompiler. Instala la versión verificada con la guía de instalación de Ghidra y guarda copias de los proyectos antes de actualizarlos.

  • 0-5 minutos: localizar una cadena, importación, símbolo o dirección fiable.
  • 5-10 minutos: leer entradas, llamadas, condiciones, escrituras y retorno.
  • 10-15 minutos: mejorar un nombre, firma o tipo con evidencia.
  • 15-20 minutos: verificar la ruta decisiva y registrar la conclusión.
PREGUNTAS FRECUENTES

Preguntas sobre el descompilador de Ghidra

¿Ghidra recupera el código fuente original?

No. Genera pseudocódigo parecido a C a partir del código máquina y de los datos del análisis. Los nombres, comentarios, tipos y estructura originales suelen haberse perdido.

¿Cómo se abre la ventana Decompiler?

Abre un programa en CodeBrowser, elige Window > Decompiler si el panel está oculto y selecciona una función definida en Listing o Symbol Tree.

¿Por qué aparecen undefined8 y muchas conversiones?

Ghidra conoce el tamaño pero no tiene un tipo fiable, o la firma es incorrecta. Revisa llamadores, registros, signo, profundidad de puntero y desplazamientos repetidos.

¿Ghidra puede descompilar C++?

Puede analizar código nativo generado desde C++, pero plantillas, clases, excepciones, inlining, optimización y símbolos eliminados reducen la similitud con el fuente.

¿Debo confiar en Decompiler o en Listing?

En ambos. Decompiler acelera la comprensión; Listing aporta la evidencia por dirección para confirmar saltos, llamadas, constantes, memoria y efectos secundarios.