windbg使用技巧

2021-06-11 07:48:22 字數 3083 閱讀 8360

dt -v

dms_server!

datarow 376c4b58+8 轉存出資料結構

dt -s 4c -n

dms_server!* 查詢結構體大小

回答本文標題中的問題, 步驟如下:

第一步, 開啟日誌記錄:

.logopen d:\output.txt

第二步, 執行你想要輸出到文字檔案中的命令:

第三步, 關閉日誌記錄:

.logclose

第四步, 檢查是否還有日誌記錄開啟:

.logfile

symbol path:

srv*c:/symbol*

srv*c:\windows\symbol*

獲取ntdll symbol

lm 列出模組的開始結束位址

lm v m ntdll*

檢視模組的版本資訊

dc [address] 轉存出記憶體資料的字元

dt cvfsfileresponse 記憶體位址+8

dps [address] 查詢 一段位址內的 symbol

s -d 00000000 l?ffffffff [address]

查詢某個值在記憶體空間內被誰引用過

dd [address] 列印出位址內的值

map中nil == 1 表示根節點

largest free region(最大可分配的記憶體塊空間) ln

查詢全域性變數,類的指標

x *!類名* 如:x *!

ssdatacenter*

005da2ec ss!

ssdatacenter::`vftable' =

005da2ec 就是這個指標

在記憶體空間中查詢類

x *!類名* 如:x *!

recordunit*

005eaf98 ss!

recordunit::`vftable' =

005eaf98 就是這個指標

s -d 00000000 l?ffffffff 005eaf98

列印出recordunit的指標

0ffbfb44 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

10357a7c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

1035fbf4 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

103671dc 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

1038164c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

103dc81c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

103e3244 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

103efa1c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

103fad0c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

10402b5c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

1040a32c 005eaf98 005eafa8 00000001 baadf00d ..^...^.........

10423fcc 005eaf98 005eafa8 00000001 baadf00d ..^...^......... (

recordunit*) 0x0ffbfb44-8

程式崩潰前的日誌可以通過檢視日誌指標獲取。

dt _heap_entry 003f4388

ntdll!_

heap_entry

+0x000 size : 3 當前位元組大小*8

+0x002

previoussize : 4 前乙個大小*8

+0x000

subsegmentcode : 0x00040003

+0x004

smalltagindex : 0x39 '9'

+0x005 flags : 0x1狀態 0x0空閒 0x1提交

+0x006 unusedbytes : 0x9

+0x007

segmentindex : 0

~.kb 列出所有執行緒的堆疊

childebp

retaddr args to child

0e41e1d4 7c956d2b 7c823eb3 00004350 0e41e384 ntdll!kifastsystemcallret

**********==

記憶體洩露三部曲

一、檢視記憶體洩露基本方法

!heap –s

:實際位址和virtual block的使用情況

!heap –stat –h %address

:某個堆(較大)的統計使用情況

!heap –flt d %size /heap –flt s %size

:按大小過濾使用情況

!heap –p –a %address

:檢視使用者資料

二、全位址排查

!address

:所有使用情況

—heap(堆管理器託管:基本方法得出的)、stack(棧記憶體:執行緒,乙個執行緒1m)、image(二進位制**)、teb(作業系統管理執行緒使用記憶體)、unknow(除new外向系統獲取的記憶體)

s -d 0 l?- 1 %address

!heap –x %address

dps %address

:檢視使用者資料

三、記憶體碎片

.logopen path\filename

!heap –a %address

.logclose

然後統計裡面busy的大小個數,找大頭逆向追溯

windbg使用技巧

一 64位系統下分析32位程式 windbg版本 跟windbg的版本無關 32位 or 64位 崩潰程式 32位 system型別 64位 此時需要轉到x86模式下,命令如下 1 load wow64exts 2 sw 二 自動分析命令 analyze v 三 symbol path 作業系統 四...

windbg除錯技巧

1 64位機器上執行32位程式得到的dump,需要先進行轉換 load wow64exts sw2 載入符號表 系統符號表 srv d mylocalsymbols 吵雜模式符號匹配 有時候 沒大改,但重編了導致之前的pdb沒有了 符號載入,吵雜模式 強制匹配符號 symopt 0x40 sym n...

windbg 除錯技巧

技巧一 在載入名解除安裝的時候下斷點 1.載入某個dll 的時候下斷點的windbg 命令 sxe ld dll name 然後按f5,進行重新整理,再使用lmf 檢視裝載的dll名稱。2.解除安裝某個dll 的時候下斷點的windbg命令 sxe ud dll name 比如 sxe ld win...