初次使用Windbg檢查C 程式記憶體

2022-07-01 10:39:07 字數 1561 閱讀 5606

新建乙個c#控制台程式,使用如下**。編譯~

class

program

}public

class

testclass

view code

初次使用,需要載入符號檔案。選擇選單: file - symbol file path,輸入:

選擇 file - attach to a process,然後在彈出的視窗中選擇我們正在執行的控制台程式

如下圖。然後輸入 .chain,用於確認sos.dll確實被載入。

輸入命令:  ~0s 

輸入命令  !clsstack -l 。可以看到,main方法有乙個區域性變數,位址是 0x020c2350

!dumpobj /d 0x020c2350 。如下圖

列印出來的內容:

name:類名

size:占用記憶體空間多少位元組

紅色框裡,是該物件所有欄位的詳細資訊**,包含每個欄位的mt(方法表位址)、offset(相對偏移量)、型別、vt(=1:值型別,=0:引用型別)、attr(靜態的還是例項的)、字段值、欄位名稱

注意,在offset中,可以看到每個欄位在記憶體的分布,如下圖。

這麼分布是為了字段對齊。即,clr為了節省空間,各個欄位在記憶體中,並不是按**定義的順序進行分布的,而是把byte欄位合到一起,讓它們共同占用4個位元組。int每個變數佔4個位元組。就形成了上圖的分布。

選擇選單 view - memory,在virtual中輸入剛才變數位址,可以驗證上面所說的情況

windbg除錯C 程式

windbg的安裝與配置 安裝後就可以在開始選單找到windbg了。要先除錯.net的程式,需要使用乙個擴充套件的dll,它在c windows microsoft.net framework v2.0.50727路徑下,檔名是sos.dll。有了它我們才能執行命令 clrstack 拷貝乙份到wi...

C程式括號匹配檢查

問題描述 編寫一程式檢查c源程式檔案中 等括號是否匹配,並輸出第乙個檢測到的不匹配的括號及所對應括號所在的行號 程式中只有乙個括號不匹配 注意 1.除了括號可能不匹配外,輸入的c源程式無其它語法錯誤 2.字元常量 字串常量及注釋中括號不應被處理,注釋包括單行注釋 和多行 注釋 3.字元和字串常量中不...

使用windbg分析dmp檔案定位程式bug

本文編寫了乙個簡單能產生除數為0異常的程式,讓其執行,產生崩潰,通過drwtsn產生dmp檔案,然後通過windbg分析dmp檔案,定位程式bug。目的 學習windbg基本功能使用。程式源 void crash void void main void 編譯環境 vc 6.0 編譯器設定 這一步設定...