Как выделить и раскрасить вывод GDB во время интерактивной отладки?

StackOverflow https://stackoverflow.com/questions/209534

  •  03-07-2019
  •  | 
  •  

Вопрос

Пожалуйста, не отвечайте, мне следует использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы увидеть его вывод с некоторыми цветами терминала.

Это было полезно?

Решение

.gdbinit

Вы можете настроить свой ~/.gdbinit иметь цвета.Вы можете использовать маммону .gdbinit который доступен здесь:

https://github.com/gdbinit/gdbinit

Вы также можете настроить его столько, сколько захотите.Я нашел это благодаря это ТАК ответ.Вот какой результат вы можете получить:

.gdbinit

Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit

Кстати, та же идея была и применено к lldb.

Панель управления ГБД

Следуя той же концепции, Панель управления ГБД предоставляет модульный визуальный интерфейс для GDB на Python.

GDB Dashboard

(пустота)ходок

Другой похожий проект использует поддержку Python в GDB для обеспечения большей расширяемости, поэтому стоит обратить на это внимание: https://github.com/dholm/voidwalker

@dholm также предоставляет свои собственные .gdbinit вдохновлен предыдущим.

(void)walker

pwndbg

Некоторые проекты предоставляют набор полезных функций, включая улучшенное отображение.Это относится к ПЕДА или pwndbg.Последний дает следующее описание:

Замена PEDA.В духе нашего хорошего друга windbg, pwndbg произносится pwnd-bag.

  • Скорость
  • Устойчивость
  • Чистый код

Он предоставляет команды для поддержки отладки и разработки эксплойтов, аналогичные командам из PEDA, а также улучшенное отображение (хотя это не основная задача проекта).Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.

pwndbg

вольтрон

А проект в описании указано:

Voltron — это расширяемый пользовательский интерфейс отладчика для хакеров.Это позволяет вам прикреплять представления утилит в других терминалах к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую ​​как разборку, содержимое стека, значения регистрации и т. Д., При этом предоставляя вам тот же клин отладчика, который вы привыкли.

Вы можете изменить свой .gdbinit чтобы автоматически интегрировать его.Однако сам дисплей находится за пределами GDB (например.в разделении tmux).

voltron

ГЭФ

ГЭФ это еще один вариант, и он описывается как:

Целью является использоваться в основном эксплуататоры и обратные инженеры, чтобы обеспечить дополнительные функции GDB с использованием API Python для оказания помощи в процессе динамического анализа и эксплуатации развития.

GEF

Другие советы

Дело не в цветах, а в GDB. текстовый интерфейс.Это имеет огромное значение для того, насколько удобен GDB.

Вы можете запустить его с помощью:

gdb -tui executable.out

Скриншот:

enter image description here

Как видите, основными особенностями являются:

  • показывает, на какой строке источника мы находимся и окружающих строках
  • показывает точки останова

Я знаю, что вам не нужен интерфейс.Но как насчет cgdb Это очень близко к GDB, это TextMode, но имеет вышеуказанное окно с синтаксисом в коде.

Можно значительно улучшить внешний вид GDB за счет использования цветов.Это делается любым из следующих способов:

  1. Цветная подсказка с помощью «установки подсказки».Например, сделайте подсказку жирным и красным:

    set prompt \033[1;31m(gdb) \033[m

    или придайте подсказке новую форму, жирную и красную:

    set prompt \033[01;31m\n\n#####################################> \033[0m

    enter image description here

  2. Раскрашенные команды с помощью хуков

  3. Цветная подсветка синтаксиса команды «список».

Все примеры доступны в следующих сообщениях в блоге, написанных Майклом Келлехером:

«Украсить 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

before - after

Я хотел подчеркнуть следующее:подчеркните строки трассировки стека, которые принадлежат моим исходным файлам (а не библиотекам).

Решением было использовать 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 может быть дополнительно использоваться для обеспечения стиля фрагментов исходного кода.Для получения дополнительной информации см. команды «установить стиль» ниже.

screenshot of gdb 8.2.91.20190401-23.fc30

вы можете получить любые цвета, какие захотите;

# 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top