Like Share Discussion Bookmark Smile

J.J. Huang   2023-01-04   Visual Studio Visual Studio 2022   瀏覽次數:次   DMCA.com Protection Status

Visual Studio 2022 | 偵錯工具中使用記憶體視窗

前言

於寫程式的過程中,常常需要知道記憶體內容的情況,因為可以幫助我們判斷寫入的資料是否有誤,對程式偵錯來說是很有用的。
然而使用Visual Studio來觀看程式中的記憶體數值是件非常簡單方便的事。

直接看看在Visual Studio觀看記憶體的結果畫面。

註:此處使用Visual Studio 2022為例。

準備專案與偵錯程式

首先,我們使用Visual Studio 2022來開個專案或是沿用HelloWorld專案。
宣告個整數變數a = 1,然後使用printf印出這個變數的位址。

1
2
3
4
5
6
7
8
#include <iostream>

int main()
{
int a = 1;
printf("%p\n", &a);
std::cout << "Hello World!\n";
}

開啟記憶體視窗

注意事項:

  • 首先該視窗與其他偵錯工具視窗一樣, 記憶體視窗只能在偵錯會話期間使用。
  • 若要啟用記憶體視窗,必須在【工具(T)】→【選項(O)】開啟選項視窗,開啟「偵錯」→「一般」 中勾選[啟用位址層級偵錯]。

開始偵錯與開啟記憶體視窗:

  • 由於此處示範的是x86的偵錯模式,所以方案平台的選項是選擇x86
  • 首先在程式的std::cout << "Hello World!\n";這行產生一個紅色圓圈的中斷點。
  • 接著我們按【本機 Windows 偵錯工具】來進行偵錯。
  • 此時進入了偵錯模式,並且程式運行到剛剛設定的中斷點;也開啟了一個主控台視窗,畫面上輸出a變數的記憶體位址0038FED4了。
  • 此時可見Visual Studio偵錯模式下一些預設的視窗被開啟,像是下方的自動變數、右方的診斷工具…等等。

    註:這些視窗是預設開啟的視窗,可以透過設定或關閉進行調整,這邊就不詳細說明。

  • 在偵錯模式下,點選【偵錯(D)】→【視窗(W)】→【記憶體(M)】→【記憶體 1(1)】。
  • 這邊只開啟一個記憶體視窗就好,多個應該是方便觀看多個記憶體位址。

    註:Visual Studio的某些版本只提供一個「記憶體視窗」。
    注意:必須在偵錯模式中,視窗才會有記憶體的選項。

  • 「記憶體視窗」預設放在上方的區塊。
  • 接著我們在「記憶體視窗」內的「位址」輸入框內輸入,上方得知的a變數的記憶體位址0x0038FED4,並按下Enter

    註:最常用(或常見)表示十六進位數值的方式是將 ‘0x’ 加在數位前,或在數位後加上小字 16。例如 0x2BAD 和 2BAD16 都是表示十進位的 11181(或1118110)。

  • 可見已經定位到記憶體位址0x0038FED4,並表示出記憶體內存放的數值01 00 00 00,也就代表這個四個位元組的變數的記憶體數值。

x86與x64的記憶體視窗差異

我們直接觀看記憶體視窗的差異,至於x86x64的差異不是這篇的重點就不深入說明。<有興趣可以上網查查關鍵字>

  • x86
  • x64

結語

使用「記憶體視窗」學習基礎的程式語言、指標、記憶體操作、破解程式、逆向工程…等等都是很基本的一個入門。


註:以上參考了
Microsoft - 在 Visual Studio 偵錯工具中使用記憶體視窗
維基百科 - 十六進位
Family with 220 icons by inipagi