¿Cómo resaltar y colorear la salida de gdb durante la depuración interactiva?
terminal colors (10)
.gdbinit
Puedes modificar tu ~/.gdbinit
para que tenga colores. Puedes usar .gdbinit
de .gdbinit
que está disponible aquí:
https://github.com/gdbinit/gdbinit
Puedes ajustarlo tanto como quieras también. Encontré esto gracias a esta respuesta SO . Este es el tipo de resultado que puede obtener:
Un repositorio GitHub también está disponible: https://github.com/gdbinit/Gdbinit
En una nota lateral, la misma idea también se aplicó a lldb .
Tablero de GDB
Siguiendo el mismo concepto, GDB Dashboard proporciona una interfaz visual modular para GDB en Python.
(vacío) andador
Otro proyecto similar utiliza el soporte Python de GDB para proporcionar más extensibilidad, por lo que vale la pena visitar este sitio: https://github.com/dholm/voidwalker
@dholm también proporciona su propio .gdbinit inspirado en el anterior.
pwndbg
Algunos proyectos proporcionan un conjunto de funciones útiles, incluida una visualización mejorada. Este es el caso de PEDA o pwndbg . Este último da la siguiente descripción:
Un reemplazo de PEDA. En el espíritu de nuestro buen amigo
windbg
,pwndbg
se pronunciapwnd-bag
.
- Velocidad
- Resistencia
- Código limpio
Proporciona comandos para apoyar el desarrollo de depuración y explotación similar a los de PEDA, y una mejor visualización (aunque este no es el enfoque principal del proyecto). El software aún está en desarrollo y aún no se ha lanzado correctamente.
voltron
La descripción del project dice:
Voltron es una interfaz de usuario depuradora extensible para piratas informáticos. Le permite adjuntar vistas de utilidad que se ejecutan en otros terminales a su depurador (LLDB o GDB), mostrando información útil como desmontaje, contenido de pila, valores de registro, etc., al tiempo que le proporciona la misma CLI de depurador a la que está acostumbrado.
Puede modificar su .gdbinit
para integrarlo automáticamente. Sin embargo, la pantalla en sí está fuera de GDB (por ejemplo, en una división de tmux).
GEF
GEF es otra opción, y se describe como:
Está destinado a ser utilizado principalmente por explotadores e ingenieros de inversión, para proporcionar características adicionales a GDB utilizando la API de Python para ayudar durante el proceso de análisis dinámico y desarrollo de exploits.
Por favor, no responda Debería usar ddd, nemiver, emacs, vim o cualquier otro front-end, prefiero gdb como es, pero me gustaría ver su salida con algunos colores de terminal.
Es posible mejorar en gran medida la apariencia de gdb mediante el uso de colores. Esto se hace a través de cualquiera de los siguientes métodos:
- Indicación coloreada a través del "indicador de configuración". Por ejemplo, haga que el mensaje sea negrita y rojo:
set prompt /033[1;31m(gdb) /033[m
- Comandos coloreados a través de ganchos
- Resaltado de sintaxis coloreada del comando "list".
Todos los ejemplos están disponibles en las siguientes publicaciones de blog escritas por Michael Kelleher:
"Embellecer GDB", 12 de mayo de 2010 (a través de archive.org)
"Destacado de sintaxis de GDB experimental", 15 de mayo de 2010 (a través de archive.org)
Limpio, acabo de encontrar este truco usando colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
No son colores, pero considera la guía de texto de gdb. Hace una gran diferencia de qué tan útil es gdb.
Puedes lanzarlo con:
gdb -tui executable.out
Captura de pantalla:
Como puede ver, las principales características son:
- muestra en qué línea de la fuente estamos y líneas circundantes
- muestra puntos de interrupción
Otra buena combinación de colores viene dada por esta configuración . Hace que inspeccionar las trazas inversas sea mucho más fácil. Para usarlo, simplemente guarde ese archivo como ~/.gdbinit
y ejecute gdb normalmente
Quería resaltar lo siguiente: enfatizar las líneas de un seguimiento de pila que pertenecen a mis archivos fuente (en lugar de bibliotecas).
La solución fue usar gdb-python (en MSYS; en Linux, por lo general, gdb
viene con Python incorporado ya?), Enganchar backtrace
, usar
python stack_trace = gdb.execute(''backtrace'', False, True'')
Luego, procese stack_trace
con las expresiones regulares de Python e imprímalas. Los colores en negrita y otros se logran con una función como esta:
def term_style(*v):
"""1 is bold, 30--37 are the 8 colours, but specifying bold may also
change the colour. 40--47 are background colours."""
return ''/x1B[''+'';''.join(map(str, v))+''m''
#Use like this:
print term_style(1) + ''This will be bold'' + term_style(0) #Reset.
print term_style(1,30) + ''This will be bold and coloured'' + term_style(0)
print term_style(1,30,40) + ''Plus coloured background'' + term_style(0)
Sé que no querías una interfaz. Pero, ¿qué tal cgdb está muy cerca de gdb, es un modo de texto pero tiene una ventana de origen arriba con resaltado de sintaxis en el código.
puedes obtener los colores que quieras;
# gdb
(gdb) shell echo -en ''/E[47;34m''"/033[1m"
...
anything is now blue foreground and white background
...
(gdb) shell tput sgr0
... back to normal
cgdb
es mucho mejor que gdb -tui
#into .gdbinit
shell mkfifo /tmp/colorPipe
define hook-disassemble
echo /n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=asm -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-disassemble
hookpost-list
end
define hook-list
echo /n
shell cat /tmp/colorPipe | c++filt | highlight --syntax=cpp -s darkness -Oxterm256 &
set logging redirect on
set logging on /tmp/colorPipe
end
define hookpost-list
set logging off
set logging redirect off
shell sleep 0.1s
end
define hook-quit
shell rm /tmp/colorPipe
end
define re
hookpost-disassemble
echo /033[0m
end
document re
Restore colorscheme
end
Advertencia: Buggy. No hay soporte TUI, hack ''modo de usuario''.
Encontré la parte principal here y la modifiqué un poco. Necesita destacar, c ++ filt. Si los colores se arruinan, emita el comando re.