対話型デバッグ中にgdb出力を強調表示および色付けする方法は?
質問
ddd、nemiver、emacs、vim、またはその他のフロントエンドを使用する必要があると返信しないでください。gdbをそのまま使用しますが、出力をいくつかの端末カラーで表示したいです。
解決
.gdbinit
〜/ .gdbinit
を微調整して色を付けることができます。ここから入手できるmammonの .gdbinit
を使用できます。
https://github.com/gdbinit/gdbinit
必要に応じて調整できます。 SOの回答のおかげでこれを見つけました。取得できる出力の種類は次のとおりです。
GitHubリポジトリも利用できます: https://github.com/gdbinit/Gdbinit
補足説明として、 lldbに適用も同じ考えでした。
GDBダッシュボード
同じ概念に従って、 GDBダッシュボードは、PythonでGDBのモジュラービジュアルインターフェースを提供します。 。
(void)walker
別の同様のプロジェクトは、GDBのPythonサポートを使用して拡張性を高めているため、チェックアウトする価値があります。 https:// github .com / dholm / voidwalker
@dholmは、以前のものに触発された彼自身の .gdbinit も提供しています。
pwndbg
一部のプロジェクトは、表示の改善など、一連の便利な機能を提供します。これは、 PEDA または pwndbg 。後者の説明は次のとおりです。
PEDAの代替。私たちの良き友人
windbg
の精神で、pwndbg
はpwnd-bag
と発音されます。
- 速度
- 回復力
- クリーンコード
これは、PEDAのものと同様のデバッグおよびエクスプロイト開発をサポートするコマンドを提供し、表示を改善します(ただし、これはプロジェクトの主な焦点ではありません)。ソフトウェアはまだ開発中であり、まだ適切にリリースされていません。
ボルトロン
プロジェクトの説明は次のとおりです。
Voltronは、ハッカー向けの拡張可能なデバッガUIです。それができます 他の端末で実行されているユーティリティビューをデバッガに接続します(LLDB またはGDB)、逆アセンブリ、スタックなどの役立つ情報を表示します 内容、レジスタ値など、まだあなたに同じを与えます 使い慣れたデバッガーCLI。
.gdbinit
を変更して、自動的に統合できます。ただし、ディスプレイ自体はGDBの外部にあります(tmuxスプリットなど)。
GEF
GEF は別のオプションであり、次のように記述されます。
これは、主にエクスプロイトおよびリバースエンジニアが使用することを目的としています。 Python APIを使用してGDBに追加機能を提供し、支援します 動的分析およびエクスプロイト開発のプロセス中。
他のヒント
色ではありませんが、gdbの text gui を検討してください。 gdbの使用方法に大きな違いが生じます。
次で起動できます:
gdb -tui executable.out
スクリーンショット:
ご覧のとおり、主な機能は次のとおりです。
- ソースのどの行とその周辺の行を示しています
- ブレークポイントを表示
フロントエンドが必要ないことはわかっています。 しかし、 cgdb はgdbに非常に近いため、 テキストモードですが、上記のソースウィンドウにコードの構文が強調表示されています。
色を使用することにより、gdbの外観を大幅に向上させることができます。これは、次のいずれかの方法で実行されます。
-
" set prompt"による色付きプロンプト。たとえば、プロンプトを太字で赤にします:
プロンプトを設定\ 033 [1; 31m(gdb)\ 033 [m
またはプロンプトを新しい形、太字および赤にします:
set prompt \ 033 [01; 31m \ n \ n ################################## #####> \ 033 [0m
-
フックによる色付きコマンド
- "リスト"の色付き構文強調表示コマンド。
すべての例は、Michael Kelleherが書いた次のブログ投稿で入手できます。
#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 ++ filt。色がおかしくなったら、reコマンドを発行してください。
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')
次に、Pythonの正規表現を使用して stack_trace
を処理し、出力します。太字などの色は、次のような関数によって実現されます。
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)
別の適切な色の組み合わせは、 thisによって提供されます。設定。バックトレースの検査がはるかに簡単になります。使用するには、そのファイルを〜/ .gdbinit
として保存し、通常どおりgdbを実行します
今後の 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