Как выделить и портировать вывод 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 за счет использования цветов. Это делается с помощью любого из следующих методов:
-
Раскрашенное приглашение через "Установить приглашение". Например, сделайте подсказку жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или сделайте подсказку новой формы, жирным и красным:
set prompt \033[01;31m\n\n#####################################> \033[0m
![enter image description here]()
-
Раскрашенные команды через крючки
- Цветная подсветка синтаксиса команды "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
Ответ 7
Неплохо, я нашел этот хак с помощью colout: https://github.com/nojhan/colout/blob/master/colout/example.gdbinit
![before - after]()
Ответ 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