Like Share Discussion Bookmark Smile

J.J. Huang   2023-01-06   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
  • 首先在程式的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