Visual Studio 2022 | 偵錯工具中使用暫存器視窗與旗標
前言
在學習逆向工程的過程中,會需要知道程式對應到在處理器中暫存器這個特殊位置內的值,進而分析、修改…等等。
然而使用Visual Studio
來觀看程式在處理器中暫存器的值是件非常簡單方便的事。
直接看看在Visual Studio
觀看暫存器視窗的畫面。
註:此處使用
Visual Studio 2022
為例,動態圖僅逐步執行幾個步驟,並非完整。
準備專案與偵錯程式
首先,我們使用Visual Studio 2022
來開個專案或是沿用HelloWorld
專案。
宣告個整數變數a = 1
,然後使用printf
印出這個變數的位址。
1 |
|
開啟暫存器視窗
注意事項:
- 首先該視窗與其他偵錯工具視窗一樣, 暫存器視窗只能在偵錯會話期間使用。
- 若要啟用暫存器視窗,必須在【工具(T)】→【選項(O)】開啟選項視窗,開啟「偵錯」→「一般」 中勾選[啟用位址層級偵錯]。
開始偵錯與開啟暫存器視窗:
- 由於此處示範的是
x86
的偵錯模式,所以方案平台的選項是選擇x86
。 - 首先在程式的
int a = 1;
這行產生一個紅色圓圈的中斷點。 - 接著我們按【本機 Windows 偵錯工具】來進行偵錯。
- 此時進入了偵錯模式,並且程式運行到剛剛設定的中斷點;也開啟了一個主控台視窗。
- 此時可見
Visual Studio
偵錯模式下一些預設的視窗被開啟,像是下方的自動變數
、右方的診斷工具
…等等。註:這些視窗是預設開啟的視窗,可以透過設定或關閉進行調整,這邊就不詳細說明。
- 在偵錯模式下,點選【偵錯(D)】→【視窗(W)】→【暫存器(G)】。
注意:必須在偵錯模式中,視窗才會有暫存器的選項。
- 「暫存器視窗」預設放在上方的區塊。
- 此時「暫存器視窗」內並未開啟「旗標」的選項。
- 在「暫存器視窗」按下滑鼠「右鍵」,勾選「旗標」,即可看到「旗標」。
註:其他的選項可以根據自己需要自行勾選。
- 接著可以使用「逐步執行(F11)」來進行偵錯。
註:動態圖僅做簡單的示範。
編輯旗標
以下內容擷取於:Microsoft - 關於 Visual Studio 中的暫存器視窗
針對Intel x86
處理器,可能會在「暫存器視窗」中看到下列旗標。在偵錯會話期間,可以編輯這些旗標。
旗標 | 設定值 |
---|---|
溢位 | OV = 1 |
Direction | UP = 1 |
中斷 | EI = 1 |
簽署 | PL = 1 |
零個 | ZR = 1 |
輔助攜帶 | AC = 1 |
Parity | PE = 1 |
Carry | CY = 1 |
結語
使用「暫存器視窗」,可以觀察到處理器中暫存器這個特殊位置,用來觀看處理器正在使用中的小型資料。
編譯或解譯原始程式碼將會根據需要,產生可將資料從記憶體移到暫存器,以及從暫存器移回記憶體的指示…等等。
註:以上參考了
Microsoft - 在 Visual Studio 在暫存器視窗中檢視暫存器值
Microsoft - 關於 Visual Studio 中的暫存器視窗
Family with 220 icons by inipagi