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

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

Ответ 1

.gdbinit

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

https://github.com/gdbinit/gdbinit

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

.gdbinit

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

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

GDB Dashboard

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

GDB Dashboard

(Недействительный) ходунок

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

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

(void)walker

pwndbg

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

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

  • скорость
  • упругость
  • Чистый код

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

pwndbg

Voltron

Описание проекта гласит:

Voltron - это расширяемый интерфейс отладчика для хакеров. Он позволяет вам присоединять служебные представления, запущенные в других терминалах, к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую как разборка, содержимое стека, значения регистров и т.д., В то же время предоставляя вам тот же CLI отладчика, к которому вы привыкли.

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

voltron

ГЭФ

GEF является еще одним вариантом, и он описывается как:

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

GEF

Ответ 2

Это не цвет, но рассмотрим gdb текст gui. Это имеет огромное значение для использования gdb.

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

gdb -tui executable.out

Скриншот:

enter image description here

Как вы можете видеть, основные функции:

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

Ответ 3

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

T9Iepi9.png?1

Ответ 4

Можно значительно улучшить внешний вид 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. Цветная подсветка синтаксиса команды "list".

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

"Украсить ГБД", 12 мая 2010 г. (через archive.org)

"Экспериментальная подсветка синтаксиса GDB", 15 мая 2010 г. (через archive.org)

Ответ 5

#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, взлома пользовательского режима.

Нашел основную часть здесь и немного изменил его. Нуждается в подсветке, С++ filt. Если цвета перепутаны с командой re re.

Ответ 6

cgdb намного лучше, чем gdb -tui

Ответ 8

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

Решение заключалось в использовании gdb-python (в MSYS, в Linux обычно gdb поставляется с уже встроенным Python?), hook 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)

Ответ 9

Еще одна хорошая комбинация цветов дается эта конфигурация. Это упрощает проверку обратных трасс. Чтобы использовать его, просто сохраните этот файл как ~/.gdbinit и запустите gdb обычно

Ответ 10

Новое в предстоящем GDB 8.3!

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=gdb/NEWS

Терминальное моделирование теперь доступно для CLI и TUI. Кроме того, GNU Source Highlight может использоваться для оформления фрагментов исходного кода. См. Ниже команды "set style" для получения дополнительной информации.

screenshot of gdb 8.2.91.20190401-23.fc30

Ответ 11

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

# 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