Пожалуйста, не отвечайте Я должен использовать ddd, nemiver, emacs, vim или любой другой интерфейс, я просто предпочитаю gdb как есть, но хотел бы видеть его вывод с некоторыми цветами термина.
Как выделить и портировать вывод gdb во время интерактивной отладки?
Ответ 1
.gdbinit
Вы можете настроить свой ~/.gdbinit
чтобы иметь цвета. Вы можете использовать .gdbinit
который доступен здесь:
https://github.com/gdbinit/gdbinit
Вы можете настроить это столько, сколько хотите. Я нашел это благодаря такому ответу. Вот вид вывода, который вы можете получить:
Также доступен репозиторий GitHub: https://github.com/gdbinit/Gdbinit.
Кстати, та же идея была применена и к lldb.
GDB Dashboard
Следуя той же концепции, GDB Dashboard предоставляет модульный визуальный интерфейс для GDB в Python.
(Недействительный) ходунок
Другой аналогичный проект использует поддержку GDB Python для обеспечения большей расширяемости, поэтому стоит проверить это: https://github.com/dholm/voidwalker
@dholm также предоставляет свой собственный .gdbinit, вдохновленный предыдущим.
pwndbg
Некоторые проекты предоставляют набор полезных функций, в том числе улучшенное отображение. Это касается PEDA или pwndbg. Последний дает следующее описание:
Замена PEDA. В духе нашего хорошего друга
windbg
pwndbg
произносится какpwnd-bag
.
- скорость
- упругость
- Чистый код
Он предоставляет команды для поддержки отладки и разработки, аналогичные разработанным в PEDA, и улучшает отображение (хотя это не является основной целью проекта). Программное обеспечение все еще находится в стадии разработки и еще не выпущено должным образом.
Voltron
Описание проекта гласит:
Voltron - это расширяемый интерфейс отладчика для хакеров. Он позволяет вам присоединять служебные представления, запущенные в других терминалах, к вашему отладчику (LLDB или GDB), отображая полезную информацию, такую как разборка, содержимое стека, значения регистров и т.д., В то же время предоставляя вам тот же CLI отладчика, к которому вы привыкли.
Вы можете изменить ваш .gdbinit
чтобы автоматически интегрировать его. Тем не менее, сам дисплей находится за пределами GDB (например, в tmux split).
ГЭФ
GEF является еще одним вариантом, и он описывается как:
Он предназначен для использования в основном эксплуататорами и реверс-инженерами, чтобы предоставить GDB дополнительные функции с использованием Python API, чтобы помочь в процессе динамического анализа и разработки эксплойтов.
Ответ 2
Это не цвет, но рассмотрим gdb текст gui. Это имеет огромное значение для использования gdb.
Вы можете запустить его с помощью:
gdb -tui executable.out
Скриншот:
Как вы можете видеть, основные функции:
- показывает, какую строку источника мы находим и окружающие линии
- показывает точки останова
Ответ 3
Я знаю, что вам не нужен интерфейс. Но как насчет cgdb, он очень близок к gdb, это textmode, но имеет исходное окно выше с подсветкой синтаксиса кода.
Ответ 4
Можно значительно улучшить внешний вид GDB за счет использования цветов. Это делается с помощью любого из следующих методов:
-
Раскрашенное приглашение через "Установить приглашение". Например, сделайте подсказку жирным и красным:
set prompt \033[1;31m(gdb) \033[m
или сделайте подсказку новой формы, жирным и красным:
set prompt \033[01;31m\n\n#####################################> \033[0m
-
Раскрашенные команды через крючки
- Цветная подсветка синтаксиса команды "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
Ответ 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" для получения дополнительной информации.
Ответ 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