vs2010中檢視記憶體和暫存器

2021-06-21 04:25:25 字數 1529 閱讀 3963

今天講一下如何從vs2010中檢視記憶體和暫存器狀態,一般來講,只要從事c/c++程式設計的人,基本上對於這篇文章完全可以略過了,但寫這篇文章的初衷在於,自己也是從這一步中過來的,記得當年自己其實也不知道如何快速使用vs中各種工具,導致花了很多時間在查詢資料上面。所以,本文基本上可以說是面向菜鳥級選手了。廢話不多說,直接上菜。。。

一、檢視暫存器

通常來說,在進行c或c++程式設計的時候,對於暫存器的檢視還是不常用。但如果你在進行彙編**程式設計,那麼學會檢視相關暫存器便顯得非常重要,你可以從相關暫存器的值來確定各引數值是否有誤,從而幫你快速檢查**。

如何檢視暫存器?本文採用乙個非常簡單的程式進行演示,如下圖1所示

圖1按下f5,全速執行到第12行處,此行**顯示的是呼叫乙個進行簡單加法的運算。

這裡需要提及的是c/c++的函式呼叫約定,這是乙個非常重要的概念,不懂的人一定要上網檢視下win32下函式呼叫約定是什麼意思,c/c++預設的呼叫約定是__cdecl,這種呼叫約定的其中一條是關於函式如何傳參以及堆疊如何處理的問題,回到我們的例程,我們按下alt+8進入反彙編,如下圖2所示

圖2從上圖我們可以看到,進入彙編**後,我們按下alt+5(也可到除錯->視窗中看到),就可以看到暫存器視窗了,單步除錯我們可以看到,程式首先將b送到暫存器eax中,因此我們看到eax的值變為2,然後把eax即b值壓入堆疊中,同理,再把b送到ecx並壓入堆疊(__cdecl呼叫約定規定傳參從右至左依次壓入堆疊),最後呼叫add函式,至於如何進入add呼叫下次再講。這裡我們就學會了檢視暫存器了,至於其他暫存器變數分別代表什麼意思,希望讀者自己查閱相關資料,此處略去。

二、檢視記憶體

檢視記憶體是使用vs2010進行編碼的乙個非常基本的技能了,快速而準確地檢視記憶體,可以幫助你準確分析**中各變數的取值,以及儲存狀態,幫助你發現程式中的bug,改進**的健壯性。

如何檢視記憶體?繼續採用以上的例程進行說明,將程式f5到第13行,再單步到下一句

圖3按下alt+6,此時我們可以看到記憶體1的視窗,我們從自動視窗中先找到指標p的位址,然後將位址複製到記憶體位址列中,回車,即可看到此時位址中的值。記憶體視窗中左邊的灰色值代表位址,右邊則表示位址中儲存的值。我們可以看到p位址對應的值為03,但後面還有000000跟著,其實因為我們儲存的是乙個整數值,需要4個位元組儲存,因此就算p中結果是3,也同樣占用了4個位元組。

這裡還需要注意的乙個概念是,大端法儲存和小端法儲存的概念。回到上面圖中我們可以看出,記憶體位址從左至右,從上至下是依次增大的。我們這個值3其實正確的讀法應該是從右至左讀取的,即0x00000003,03是在最低位,而03也是儲存在記憶體位址中的低位址中的,因此這是小端法儲存,大端法則剛好相反。需要了解這方面更多資訊的人,一定要上網查詢更多資料多學習,本文就不再詳述。

vs2010中檢視記憶體和暫存器

今天講一下如何從vs2010中檢視記憶體和暫存器狀態,一般來講,只要從事c c 程式設計的人,基本上對於這篇文章完全可以略過了,但寫這篇文章的初衷在於,自己也是從這一步中過來的,記得當年自己其實也不知道如何快速使用vs中各種工具,導致花了很多時間在查詢資料上面。所以,本文基本上可以說是面向菜鳥級選手...

儲存 暫存器和記憶體

計算機儲存塔狀結構,暫存器最快,記憶體其次,最慢的是硬碟 同樣是電晶體儲存裝置,為什麼暫存器比記憶體快?一 距離不同 距離不是主要因素,但是最好理解,記憶體離cpu比較遠,所以要耗費更長時間讀取。以3ghz的cpu為例,電流每秒鐘 可以振盪30億次,每次耗時大約為0.33納秒。光在1納秒的時間內,可...

通用暫存器和記憶體

計算機在執行時,需要提供資料的容器 容器由記憶體和cpu提供,記憶體提供的容器比較多 cpu提供的容器較少但其中的資料計算速度快 cpu提供的容器就是暫存器,暫存器有特定的資料寬度,決定了該暫存器儲存資料的範圍 1.常用的32位暫存器 32位通用暫存器還可以拆分來使用 將低16位當做16位暫存器 一...