Как выделить и раскрасить вывод GDB во время интерактивной отладки?
Вопрос
Пожалуйста, не отвечайте, мне следует использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы увидеть его вывод с некоторыми цветами терминала.
Решение
.gdbinit
Вы можете настроить свой ~/.gdbinit
иметь цвета.Вы можете использовать маммону .gdbinit
который доступен здесь:
https://github.com/gdbinit/gdbinit
Вы также можете настроить его столько, сколько захотите.Я нашел это благодаря это ТАК ответ.Вот какой результат вы можете получить:
Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit
Кстати, та же идея была и применено к lldb.
Панель управления ГБД
Следуя той же концепции, Панель управления ГБД предоставляет модульный визуальный интерфейс для GDB на Python.
(пустота)ходок
Другой похожий проект использует поддержку Python в GDB для обеспечения большей расширяемости, поэтому стоит обратить на это внимание: https://github.com/dholm/voidwalker
@dholm также предоставляет свои собственные .gdbinit вдохновлен предыдущим.
pwndbg
Некоторые проекты предоставляют набор полезных функций, включая улучшенное отображение.Это относится к ПЕДА или pwndbg.Последний дает следующее описание:
Замена PEDA.В духе нашего хорошего друга
windbg
,pwndbg
произноситсяpwnd-bag
.
- Скорость
- Устойчивость
- Чистый код
Он предоставляет команды для поддержки отладки и разработки эксплойтов, аналогичные командам из PEDA, а также улучшенное отображение (хотя это не основная задача проекта).Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.
вольтрон
А проект в описании указано:
Voltron — это расширяемый пользовательский интерфейс отладчика для хакеров.Это позволяет вам прикреплять представления утилит в других терминалах к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую как разборку, содержимое стека, значения регистрации и т. Д., При этом предоставляя вам тот же клин отладчика, который вы привыкли.
Вы можете изменить свой .gdbinit
чтобы автоматически интегрировать его.Однако сам дисплей находится за пределами GDB (например.в разделении tmux).
ГЭФ
ГЭФ это еще один вариант, и он описывается как:
Целью является использоваться в основном эксплуататоры и обратные инженеры, чтобы обеспечить дополнительные функции GDB с использованием API Python для оказания помощи в процессе динамического анализа и эксплуатации развития.
Другие советы
Дело не в цветах, а в GDB. текстовый интерфейс.Это имеет огромное значение для того, насколько удобен GDB.
Вы можете запустить его с помощью:
gdb -tui executable.out
Скриншот:
Как видите, основными особенностями являются:
- показывает, на какой строке источника мы находимся и окружающих строках
- показывает точки останова
Я знаю, что вам не нужен интерфейс.Но как насчет cgdb Это очень близко к GDB, это TextMode, но имеет вышеуказанное окно с синтаксисом в коде.
Можно значительно улучшить внешний вид GDB за счет использования цветов.Это делается любым из следующих способов:
Цветная подсказка с помощью «установки подсказки».Например, сделайте подсказку жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или придайте подсказке новую форму, жирную и красную:
set prompt \033[01;31m\n\n#####################################> \033[0m
Раскрашенные команды с помощью хуков
- Цветная подсветка синтаксиса команды «список».
Все примеры доступны в следующих сообщениях в блоге, написанных Майклом Келлехером:
«Украсить GDB», 12 мая 2010 г. (через archive.org)
«Экспериментальная подсветка синтаксиса GDB», 15 мая 2010 г. (через 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
Предупреждение:Багги.Нет поддержки TUI, хак «пользовательского режима».
Нашёл основную часть здесьи немного модифицировал его.Требуется выделение, фильтр C++.Если цвета перепутались, выполните повторную команду.
cgdb
намного лучше, чем gdb -tui
Отлично, я только что нашел этот хак, используя colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
Я хотел подчеркнуть следующее:подчеркните строки трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).
Решением было использовать gdb-python (в MSYS;в Linux обычно gdb
поставляется со встроенным Python?), хук backtrace
, использовать
python stack_trace = gdb.execute('backtrace', False, True')
Затем обработайте stack_trace
с регулярными выражениями Python и распечатайте их.Жирный и другие цвета достигаются с помощью такой функции:
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)
Еще одно удачное сочетание цветов дает эта конфигурация.Это значительно упрощает проверку обратных следов.Чтобы использовать его, просто сохраните этот файл как ~/.gdbinit
и запустите GDB в обычном режиме
Новое в предстоящих ГББ 8.3!
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS
Стиль терминала теперь доступен для CLI и TUI.Выделение источника GNU может быть дополнительно использоваться для обеспечения стиля фрагментов исходного кода.Для получения дополнительной информации см. команды «установить стиль» ниже.
вы можете получить любые цвета, какие захотите;
# 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