¿Cómo resaltar y colorear la salida de gdb durante la depuración interactiva?
Pregunta
Por favor, no responda. Debería usar ddd, nemiver, emacs, vim o cualquier otro front-end, prefiero gdb tal como es, pero me gustaría ver su salida con algunos colores de terminal.
Solución
.gdbinit
Puedes modificar tu ~ / .gdbinit
para tener colores. Puede usar .gdbinit
de mammon, que está disponible aquí:
https://github.com/gdbinit/gdbinit
También puedes ajustarlo todo lo que quieras. Encontré esto gracias a esta respuesta SO . Aquí está el tipo de salida que puede obtener:
También hay un repositorio de GitHub disponible: https://github.com/gdbinit/Gdbinit
En una nota al margen, la misma idea también se aplicada a lldb .
Panel de GDB
Siguiendo el mismo concepto, GDB Dashboard proporciona una interfaz visual modular para GDB en Python .
(void) walker
Otro proyecto similar utiliza el soporte Python de GDB para proporcionar más extensibilidad, así que vale la pena echarle un vistazo: https: // github .com / dholm / voidwalker
@dholm también proporciona su propio .gdbinit inspirado del 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 PEDA. En el espíritu de nuestro buen amigo
windbg
,pwndbg
se pronunciapwnd-bag
.
- velocidad
- Resistencia
- Código limpio
Proporciona comandos para admitir la depuración y el desarrollo de exploits similares 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
El proyecto dice:
Voltron es una interfaz de usuario de depurador extensible para hackers. Te permite adjunte vistas de utilidad que se ejecutan en otros terminales a su depurador (LLDB o GDB), que muestra información útil como el desmontaje, la pila contenidos, valores de registro, etc, mientras que todavía le da el mismo CLI del depurador al 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 tmux).
GEF
GEF es otra opción, y se describe como:
Está destinado a ser utilizado principalmente por explotadores e ingenieros inversos, para Proporcionar funciones adicionales a GDB utilizando la API de Python para ayudar durante el proceso de análisis dinámico y desarrollo de exploits.
Otros consejos
No son colores, pero considere gui de texto de gdb. Hace una gran diferencia en la utilidad de gdb.
Puede iniciarlo con:
gdb -tui executable.out
Captura de pantalla:
Como puede ver, las características principales son:
- muestra la línea de la fuente en la que estamos y las líneas circundantes
- muestra puntos de interrupción
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.
Es posible mejorar en gran medida la apariencia de gdb mediante el uso de colores. Esto se realiza a través de cualquiera de los siguientes métodos:
-
Solicitud coloreada a través de " establecer solicitud " ;. Por ejemplo, haga que el mensaje aparezca en negrita y rojo:
set prompt \ 033 [1; 31m (gdb) \ 033 [m
o haga que la solicitud tenga una nueva forma, negrita y roja:
set prompt \ 033 [01; 31m \ n \ n ################################ ##### > \ 033 [0m
-
Comandos coloreados a través de ganchos
- resaltado de sintaxis coloreada de la " lista " comando.
Todos los ejemplos están disponibles en las siguientes publicaciones de blog escritas por Michael Kelleher:
" Beautify GDB " ;, 12 de mayo de 2010 (a través de archive.org)
" resaltado sintáctico de sintaxis GDB " ; 15 de mayo de 2010 (a través de archive.org)
#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 es compatible con TUI, hack de 'modo de usuario'.
Encontramos la parte principal aquí y lo modifiqué un poco. Necesita resaltado, c ++ filt. Si los colores se estropean, emita el comando re.
cgdb
es mucho mejor que gdb -tui
Limpio, acabo de encontrar este truco usando colout: https: / /github.com/nojhan/colout/blob/master/colout/example.gdbinit
Quería resaltar lo siguiente: enfatizar las líneas de un seguimiento de pila que pertenecen a mis archivos de origen (en lugar de bibliotecas).
La solución fue usar gdb-python (en MSYS; en Linux típicamente gdb
ya viene con Python incorporado), enganche backtrace
, use
python stack_trace = gdb.execute('backtrace', False, True')
Luego procese stack_trace
con las expresiones regulares de Python e imprímalas. Los colores llamativos y otros se logran mediante 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)
Otra buena combinación de colores está dada por esta configuración . Facilita la inspección de los backtraces mucho más. Para usarlo, simplemente guarde ese archivo como ~ / .gdbinit
y ejecute gdb normalmente
¡Nuevo en el próximo GDB 8.3!
https: / /sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
El estilo de terminal ahora está disponible para la CLI y la TUI. Fuente GNU Highlight también se puede usar para proporcionar estilo al código fuente fragmentos Consulte el " establecer estilo " comandos, a continuación, para obtener más información.
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