All Articles

WSL2 と Windows Terminal で pwntools のデバッグ機能を使う際に、コンテキスト設定で画面の分割比率を変更する

もくじ

WSL2 と Windows Terminal で pwntools のデバッグ機能を使う際に、コンテキスト設定で画面の分割比率を変更する方法についてのメモ書きです。

ついでに、WSL2 & Windows Terminal 環境で gdb-peda を使用する際に pwntools を使うとレジスタ情報を参照できなくなる問題の回避策についてもまとめています。

画面の分割幅を変更する方法

WSL2 & Windows Terminal で pwntools の gdb.debug() を使用する場合、デフォルトでは以下のコマンドでデバッグターミナルが起動されるようです。

['/mnt/c/Windows/system32/cmd.exe', '/c', 'start', 'wt.exe', '-w', '0', 'split-pane', '-d', '.', 'wsl.exe', '-d', 'Ubuntu', 'bash', '-c', '/tmp/tmpnhyc4xx1']

このコンテキストでは、wt.exe -w 0 split-pane -d . を使用して現在使用中のウインドウ内でデフォルトプロファイルを使用してペイン分割したターミナルを起動します。

参考:Windows ターミナルのコマンド ライン引数 | Microsoft Learn

しかし、このままではウインドウの分割幅が 5:5 に強制されてしまい、あとから変更できなくなるため、デバッグを行うには少々不便です。

そのため、Window Terminal の split-pane 機能の -s オプションにより分割幅の指定をコンテキストに加えることで、デバッグウインドウのサイズを大きくすることができます。

実際に私が使用しているコンテキストは以下のものです。

context.terminal = ["/mnt/c/Windows/system32/cmd.exe", "/c", "start", "wt.exe", "-w", "0", "sp", "-s", ".7", "-d", ".", "wsl.exe", '-d', "Ubuntu", "bash", "-c"]

この設定を pwntools を使用する Python スクリプト内で定義することで、以下のように分割時の画面の比率を 3:7 として、デバッグウインドウをより広くすることができます。

image-20240725233901766

おまけ:pwntools と gdb-peda を WSL2 & Windows Terminal で使用する場合の問題

原因は全く不明ながら、Windows Terminal と WSL2 の環境で pwntools の gdb.debug() を使用すると、gdb-peda のレジスタビューが機能しなくなる問題が発生します。

image-20240725205328140

同じ環境で普通に gdb コマンドを実行する分にはレジスタビューの情報も正常に表示されるため、pwntools の gdb モジュール(というよりは恐らく gdbserver ?) を利用しているのが原因なような気がします。

image-20240725205359559

解決方法 1:tmux を使用する

原因の特定には至ってませんがとりあえず tmux を使用することで問題の発生を回避できることは確認しました。

まずは pwntools のスクリプトを実行するターミナルで tmux を起動します。

続けて、context.terminal を以下のように置き換えた pwntools のスクリプトを実行します。

context.terminal =  ["tmux", "splitw", "-h"]

これで、WSL2 & Windows Terminal の環境でも gdb-peda のレジスタ情報を参照できるようになります。

image-20240725205624716

解決方法 2:gef や pwndbg を使用する

もう 1 つの解決方法として、そもそも gdb-peda の利用をやめる方法があります。

確認したところ、gef や pwndbg を使用する場合には WSL2&Windows Terminal の環境で pwntools の gdb.debug() を使用する場合でもレジスタ情報を含む情報を正常に表示することができました。

そのため、私はずっと gdb-peda を愛用してきたものの、残念ながらこれを機に pwndbg に切り替えることにしました。

参考:pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy

参考:hugsy/gef: GEF (GDB Enhanced Features) - a modern experience for GDB with advanced debugging capabilities for exploit devs & reverse engineers on Linux

まとめ

メモ書きです。