C-Lang#WSL2+VS Code_Part3_変数ウォッチ・逆アセンブリ・メモリ確認!

こちらの記事シリーズはCプログラムの勉強やVS CODEなどの環境構築になります。今回は以下の項目を完成させます。

  • 変数ウォッチの活用
  • 逆アセンブリ表示
  • メモリ確認

さ、FAを楽しもう!

Reference Link

C-Lang#WSL2+VS Code_Part1_Windows 11でC言語開発環境を構築
C-Lang#WSL2+VS Code_Part2_Windows 11でCプログラムをデバッグ!
こちらの記事シリーズはCプログラムの勉強やVS CODEなどの環境構築になります。今回は以下の項目を完成させます。 C/C++Plu...

コラボ1:変数ウォッチ

Run and Debug→WATCHで変数を監視できます。それはみなさんPLCで使ってるWATCH TABLEと近い機能です。

Expression to watch の欄で監視したい変数を入力します。

Done!WATCHでsrc_lenの現在値を確認できました。

下図のように、必要な変数をWATCH Tabにどんどん入れていきましょう。

VS CodeのWATCH Tabは本当に変数を監視してるかを確認したいので、Step Overをクリックし次のプログラムLineに進みます。

Done!dest_lenが56に変わりました。

コラボ2:逆アセンブリ

VS Code の「逆アセンブリ」機能は、デバッグ中に実行中のバイナリコードをアセンブリ命令として表示する機能です。つまり、ソースコードがなくても CPU が実際に実行している命令レベルで動きを追えるモードです。

何が見えるのか?

C や C++ などのソースをコンパイルした結果の 機械語を、人間が読めるアセンブリ表記に変換して表示します。それは関数やループ、変数アクセスなどが、mov, add, jmp などの命令として見え、また変数やメモリのアドレス、レジスタの値を直接確認できます。

いつ使う?

逆アセンブリは様々なケースで活躍できます。

  • 最適化後の動作確認(コンパイラがどう変換したか見る)
  • ソースコードが無いライブラリやバイナリの解析
  • 難しいバグの原因調査(特にメモリ破壊やジャンプミスなど)
  • 低レベル動作の学習(CPU命令やABIの理解)

表示方法

VS CodeでCtrl+Shift+Pでコマンドラインを開きます。

Open Disassembly Viewを開きます。

Done!VS Codeの逆アセンブリ画面が表示されました。

ソートコードを見ながらアセンブリを確認したい場合は、下図のICONをクリックします。

Done!VS Codeは現在下図のように右・左に画面を分けれるようになりました。

コラボ3:メモリをダンプしてみる

最後はVS CODE上でメモリ値を確認します。Terminal→DEBUG CONSOLEをクリックします。

下記のコマンドを実行し、メモリに格納されたinput変数値を確認できます。

exec x/64bx input

もちろん他の変数にも同じの操作です。

-exec x/64bx compressed

こちらのコマンドで現在フレームの詳細を確認できます。

-exec info frame
#0  main () at /home/threespc07/ws/zlib_hello/main.c:12

こちらのコマンドでプログラムの逆アセンブリを確認できます。

-exec disassemble

こちらのコマンドでレジスタ値の確認も可能です。

-exec info registers

最後の少し補足ですが、execには様々なオプションがあり、それによって表示する結果も分かります。詳しくはCHATGPTに聞いて下さい。

exec x/64bx input
部分意味
-execVS Code から gdbコマンドを実行する指示
xexamine memory(メモリの中身を表示)
/64b表示する長さと形式の指定64 バイトb(byte) 単位で表示
x のあと bbyte単位で表示(他にもh=halfword, w=wordなどある)
x のあと x表示形式が16進数(hex)(dなら10進、iなら命令など)
inputどのアドレスをダンプするか(ここでは input 変数の先頭アドレス)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする