Visual Studio 2022 | 偵錯工具中使用記憶體視窗
前言
於寫程式的過程中,常常需要知道記憶體內容的情況,因為可以幫助我們判斷寫入的資料是否有誤,對程式偵錯來說是很有用的。
然而使用Visual Studio
來觀看程式中的記憶體數值是件非常簡單方便的事。
直接看看在Visual Studio
觀看記憶體的結果畫面。
註:此處使用
Visual Studio 2022
為例。
準備專案與偵錯程式
首先,我們使用Visual Studio 2022
來開個專案或是沿用HelloWorld
專案。
宣告個整數變數a = 1
,然後使用printf
印出這個變數的位址。
1 |
|
開啟記憶體視窗
注意事項:
- 首先該視窗與其他偵錯工具視窗一樣, 記憶體視窗只能在偵錯會話期間使用。
- 若要啟用記憶體視窗,必須在【工具(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的記憶體視窗差異
我們直接觀看記憶體視窗的差異,至於x86
與x64
的差異不是這篇的重點就不深入說明。<有興趣可以上網查查關鍵字>
- x86
- x64
結語
使用「記憶體視窗」學習基礎的程式語言、指標、記憶體操作、破解程式、逆向工程…等等都是很基本的一個入門。
註:以上參考了
Microsoft - 在 Visual Studio 偵錯工具中使用記憶體視窗
維基百科 - 十六進位
Family with 220 icons by inipagi