¿Ghidra tiene un depurador?
Sí. Ghidra tiene un marco de depuración que puede iniciar o conectar un objetivo activo, registrar una traza, mostrar registros y memoria y permitir el avance con puntos de interrupción. El depurador no sustituye a Decompiler: Decompiler interpreta el programa de forma estática, mientras que el depurador observa un estado concreto de una ejecución.
En una primera sesión piensa en tres vistas conectadas. GDB u otro agente controla el proceso, Ghidra registra los cambios como una traza y el programa estático aporta nombres, funciones y contexto. Las conclusiones más útiles comparan las tres vistas, en vez de confiar en un solo panel.
Depura únicamente programas propios, autorizados o creados para formación. Mantén archivos desconocidos en una máquina virtual aislada y no ejecutes una muestra no confiable en un equipo con credenciales personales.
Prepara Ghidra, GDB y un laboratorio seguro
La verificación del sitio del 6 de agosto de 2026 encontró Ghidra 12.1.2 en la versión oficial de NationalSecurityAgency/ghidra. Se publicó el 5 de junio de 2026 y mantiene el requisito de JDK 21 de 64 bits indicado en la guía de instalación. Instala primero el archivo oficial y comprueba que Ghidra abre antes de investigar el depurador.
Los ejemplos usan conceptos de un objetivo nativo y GDB. Los campos exactos cambian según el sistema y el agente, pero las decisiones son las mismas: elegir arquitectura, usar una ruta sencilla, registrar argumentos y distinguir entre iniciar localmente, adjuntarse a un proceso o conectar un servidor GDB remoto.
- Usa un ejecutable pequeño con entrada y salida previsibles.
- Guarda el original, su hash y el proyecto de Ghidra en carpetas separadas.
- Empieza con análisis estático si el objetivo es desconocido; ejecutar código no es obligatorio.
- Consulta el curso oficial del depurador de Ghidra para ejemplos de agentes concretos.
| Necesitas | Por qué importa | Comprobación |
|---|---|---|
| Ghidra 12.1.2 | Interfaz de depuración y trazas | Abre Ghidra normalmente |
| JDK 21 de 64 bits | Ejecuta la aplicación Java | Comprueba java -version |
| GDB o agente | Controla el proceso activo | Ejecuta gdb --version |
| Muestra autorizada | Mantiene el ejercicio legal | Usa un binario de laboratorio |
| Símbolos si existen | Facilitan la lectura | Conserva los archivos de depuración |
Inicia un objetivo con el depurador de Ghidra
Crea un proyecto no compartido e importa el ejecutable de práctica para que Ghidra prepare la vista estática. Después abre la herramienta Debugger. En la primera pasada no necesitas recuperar el código fuente perfecto: comprueba que el objetivo inicia, que la arquitectura es correcta y que la traza recibe un estado útil.
Elige el lanzador local de GDB y revisa cada campo antes de pulsar Launch. Image es el archivo, Arguments son los argumentos exactos, gdb selecciona el ejecutable y Architecture y Endian deben coincidir con la muestra. Si hay dudas, verifica el formato antes de repetir un lanzamiento incorrecto.
- 1
Crea el proyecto
Abre la ventana de proyectos, elige File > New Project, selecciona Non-Shared Project y usa una carpeta de laboratorio. Importa el mismo archivo que vas a iniciar.
- 2
Abre Debugger
Inicia la herramienta Debugger y elige la acción del agente que corresponda. Mantén abierto el programa estático para compararlo con la traza.
- 3
Revisa el lanzador
Configura ruta, argumentos, comando GDB, arquitectura, endianess y terminal si hace falta. Para la primera prueba evita espacios y caracteres especiales en la ruta.
- 4
Inicia y pausa
Inicia el objetivo, espera la primera parada y confirma que aparecen hilo, contador de programa, Listing y consola antes de avanzar.

Adjúntate a un proceso o conecta un objetivo remoto
Iniciar coloca el objetivo bajo control del depurador. Adjuntarse comienza con un proceso ya activo y una conexión remota usa un agente como GDB server. Estos modos añaden permisos, arquitectura, mapas de memoria y variables de red. Haz funcionar primero un lanzamiento local antes de cambiar al modo attach o remoto.
Para adjuntarte, identifica el proceso dentro de un laboratorio autorizado, elige el conector apropiado y confirma su arquitectura. En un objetivo remoto verifica host, puerto, versión del servidor, símbolos y límite de confianza. Una conexión puede tener éxito aunque falten registros, memoria o módulos en la traza.
No expongas un servidor de depuración a una red no confiable. Usa una red privada de laboratorio, autenticación o un túnel seguro cuando corresponda y cierra el listener al terminar.
- 1
Elige el modo
Usa Launch para un proceso local nuevo, Attach para uno local existente o un flujo remoto para GDB server u otro agente compatible.
- 2
Haz coincidir el objetivo
Comprueba procesador, endianess, sistema operativo y espacio de direcciones. Carga símbolos compatibles si el objetivo está despojado u optimizado.
- 3
Valida la primera parada
Revisa hilo, contador, módulos y consola. Si solo aparece un mensaje de conexión, la sesión aún no está lista.
Entiende el espacio de trabajo del depurador
El espacio de trabajo muestra varias versiones del mismo estado de ejecución. Comienza por el contador de programa y el hilo seleccionado; después usa los paneles cercanos para responder una pregunta concreta. Abrir todas las vistas a la vez suele ocultar la causa del problema en una primera sesión.
Registers es una instantánea, no una explicación de alto nivel. Un registro cambiado indica qué observó el objetivo en una parada. Comprueba por qué cambió leyendo la instrucción en Listing, la pila o memoria y la relación entre llamador y llamado en el programa estático.
| Ventana | Qué muestra | Primera acción útil |
|---|---|---|
| Debug Console | Mensajes y comandos del agente | Busca errores de inicio |
| Dynamic Listing | Instrucciones en la traza | Sigue el contador |
| Breakpoints | Paradas activas y efectivas | Confirma el estado |
| Registers | Valores de registros | Compara antes y después |
| Threads / Stack | Hilos y marcos | Selecciona el hilo útil |
| Memory | Bytes y regiones | Inspecciona una dirección |

Usa puntos de interrupción y avanza por el código
Un punto de interrupción solo sirve si puedes explicar por qué detiene el objetivo. Empieza por la entrada, una función conocida o una rama relacionada con la entrada de prueba. Después usa Resume para continuar, Interrupt para recuperar el control, Step Into para entrar en una llamada, Step Over para mantener el nivel actual y Step Out para volver al llamador.
Si el punto aparece pero nunca es efectivo, comprueba si el módulo está cargado, si la dirección está mapeada, si los permisos permiten la parada y si el enlace entre estado dinámico y programa estático es correcto. Una función optimizada o inline puede requerir una instrucción cercana.
- Empieza con un solo punto de interrupción.
- Anota contador, hilo y registro relevante antes de avanzar.
- Después de cada parada importante registra entrada, rama, memoria y conclusión.
- Elimina o desactiva puntos temporales antes de compartir el proyecto.
Relaciona el estado vivo con CodeBrowser y Decompiler
El depurador resulta más útil cuando la traza y el programa estático están relacionados. Usa contador, módulo, función y bytes para encontrar el mismo código en CodeBrowser. Después trata Decompiler como una hipótesis: muestra un flujo probable, pero debes comprobarlo contra Listing y el estado vivo.
Esta conexión distingue al depurador de una terminal GDB aislada. GDB controla la ejecución, mientras Ghidra mantiene la traza junto a símbolos, bloques de memoria, referencias y contexto decompilado. Si el enlace no coincide, revisa base del módulo, arquitectura, relocación y programa importado.
- 1
Localiza la dirección
Usa contador o punto de interrupción para identificar módulo y dirección actuales.
- 2
Encuentra la coincidencia estática
Abre la ubicación en CodeBrowser y confirma bytes, límites de función y mapa del módulo.
- 3
Explica el comportamiento
Compara Listing, Decompiler, registros, memoria y pila; separa lo observado de lo inferido.
Problemas comunes del depurador de Ghidra
La mayoría de los fallos iniciales son desajustes de configuración, no ausencia de la función. Cambia una sola variable y conserva la salida de la consola. Una muestra pequeña y conocida ayuda a probar la cadena completa antes de usar un objetivo complejo.
Una conexión exitosa tampoco demuestra que la sesión esté lista. Confirma hilo, contador, módulos y al menos un panel de estado con datos. Si el objetivo no tiene símbolos o está muy optimizado, dedica tiempo a símbolos y mapeo de direcciones.
| Síntoma | Causa probable | Siguiente paso |
|---|---|---|
| No se encuentra GDB | No está instalado o no está en PATH | Usa ruta absoluta y verifica gdb --version |
| Instrucciones inútiles | Arquitectura o endianess incorrectos | Revisa el formato e importa el lenguaje correcto |
| Breakpoint pendiente | Módulo o dirección no mapeados | Avanza, revisa Modules y vuelve a fijarlo |
| Registros vacíos | La traza no capturó el estado | Selecciona el hilo detenido y actualiza |
| Símbolos incorrectos | Archivos despojados o incompatibles | Carga símbolos que correspondan |
| Attach denegado | Permiso del sistema o aislamiento | Usa un proceso autorizado y ajusta la política |
Qué aprender después de la primera sesión
Repite el mismo ciclo de inicio y parada en dos o tres programas pequeños y autorizados antes de probar un objetivo remoto o con muchos hilos. Practica explicar una rama desde la entrada, pasando por el punto de interrupción, hasta el cambio de registro o memoria y la función estática correspondiente.
Usa el tutorial de Ghidra para principiantes para crear proyectos, ejecutar Auto Analysis y seguir referencias. Consulta la guía de Decompiler para mejorar nombres y tipos, y vuelve a la guía de instalación si el problema real es JDK o el lanzador. El curso oficial del depurador cubre detalles de agentes concretos.
Preguntas frecuentes del depurador de Ghidra
¿Ghidra tiene un depurador?
Sí. Ghidra incluye un marco para iniciar o conectar un objetivo, registrar trazas, inspeccionar estado, usar puntos de interrupción y avanzar por la ejecución. Complementa CodeBrowser y Decompiler.
¿Cómo adjunto el depurador de Ghidra a un proceso?
Abre Debugger, elige un flujo Attach compatible, selecciona el proceso autorizado y verifica arquitectura y estado inicial. Confirma que aparecen hilo, contador, módulos y registros antes de avanzar.
¿Necesito GDB para usar el depurador de Ghidra?
Depende del agente y del flujo. Esta guía usa GDB porque es una interfaz común para objetivos locales y remotos; otros agentes pueden tener requisitos distintos.
¿El depurador de Ghidra es lo mismo que Decompiler?
No. Decompiler interpreta bytes de forma estática; el depurador observa instrucción, registros, memoria, hilos y pila durante una ejecución. Lo más útil es usar ambos juntos.
¿Qué versión de Ghidra se comprobó?
El endpoint oficial de última versión consultado el 6 de agosto de 2026 indicó Ghidra 12.1.2, publicado el 5 de junio de 2026. Comprueba de nuevo la página oficial para futuras actualizaciones.