windbg除錯命令5 ln 偽暫存器

2021-08-27 10:33:29 字數 2717 閱讀 4185

1.ln

ln 命令顯示給定位址處的或者最近的符號。

ln表示list near,ln命令將盡可能地給出與特定位址相關的符號,如果沒有符號能夠精確地與這個位址匹配,那麼偵錯程式將通過指標演算法對靠近這位址的符號進行運逄,

並返回運算結果符號

0:000> ln 01012475

(01012475) calc!winmaincrtstartup | (0101263c) calc!__cxxframehandler

exact matches:

calc!winmaincrtstartup =

0:000> ln 01012475+1

(01012475) calc!winmaincrtstartup+0x1 | (0101263c) calc!__cxxframehandler

我們發現,第乙個顯示為exact matches:表示精確匹配了乙個位址,如果不是精確匹配,我們要小心,是否模組進行了優化,在優化後,乙個函式,可能被拆分為多個部分

當你在檢視某部分資料,卻不知道這部分資料所表示的內容時,這個命名能帶來極大的幫助

2.偽暫存器

對於那些偶爾使用偵錯程式的使用者是很難記得所有平台的指令指標暫存器名字(或其他的名字),為了克服這個問題,偵錯程式的開發團隊引入了各種偽暫存器,由偵錯程式把這些偽暫存器對應到不同的硬體架構上,形式為$name,與標準的暫存器一樣,如果要在表示式中使用偽暫存器,那麼必須使用轉義字元@

$exentry

當前程序的入口位址

0:002> r $exentry

$exentry=01012475

一般可以直接在這下斷點,

這個就對應pe檔案中的imagebase+addressofentrypoint(_image_optional_header)

$ip指令指標暫存器

在x86架構上,$ip = eip

在x64架構上,$ip = rip

在itanium架構上, $ip = iip

0:000> r @$ip

$ip=7c92120e

0:000> r eip

eip=7c92120e

注意到下面顯示的分別是$ip,eip,雖然它們在x86下是同乙個東東.

$ra當前函式的返回位址

0:000> r $ra

$ra=7c95e612

0:000> kb

childebp retaddr args to child

0012fb1c 7c95e612 7ffdd000 7ffde000 00000000 ntdll!dbgbreakpoint

0012fc94 7c94108f 0012fd30 7c920000 0012fce0 ntdll!ldrpinitializeprocess+0xffa

0012fd1c 7c92e437 0012fd30 7c920000 00000000 ntdll!_ldrpinitialize+0x183

00000000 00000000 00000000 00000000 00000000 ntdll!kiuserapcdispatcher+0x7

0:000> ~* r $ra

$ra=77d191be

$ra=7c92df2c

$ra=7c92df3c

$ra=7c970010

$retreg

主要的值暫存器,在函式呼叫返回後,函式的結果將放在這個暫存器中,根據處理器架構的不同,$retreg的值分別為

在x86架構上,$retreg = eax

在x64架構上,$retreg = rax

在itanium架構上,$retreg = ret0

0:000>r$retreg

$retreg=00251eb4

0:000>reax

eax=00251eb4

0:000> r $retreg

$retreg=00251eb4

0:000> r eax

eax=00251eb4

$csp

當前的棧指標,根據處理器架構的不同,$csp的值分別為

在x86架構上,$csp = esp

在x64架構上,$csp = rsp

在itanium架構上,$csp= bsp

0:000>r$csp

$csp=0012fb24

0:000>resp

esp=0012fb24

0:000> r $csp

$csp=0012fb24

0:000> r esp

esp=0012fb24

$tpid

當前程序的標識(pid)

0:000>r$tpid

$tpid=000013f4

0:000> r $tpid

$tpid=000013f4

$tid

當前執行緒的標識(tid0

0:000>r$tid

$tid=000014a0

0:000> r $tid

$tid=000014a0

WinDBG常用除錯命令

查詢符號 3.檢視 event 物件的訊號狀態 object basenamedobjects dt b nt kevent xx 4.檢視 lasterror 值 gle 5.指定進製形式,0x 0n 0t 0y 分別表示 16 10 8 2 進製 0x12345678 0n10 evaluate...

WinDbg常用除錯命令

寫在前面的話 除錯當然可以用windbg,樓主發現先用debugdiagnostictool來分析更棒。但是樓主發現1.2版的debugdiag有advanced analysis,但2.0版本又沒有了,非常不解,看來只能用1.2版本。分析前先設定pdb路徑,tools options and se...

windbg 命令 4 windbg除錯符號表1

我們都知道,程式根據配置不同,可以build成release和debug兩個版本。一般發布出去的是release版本,相比debug版本,release版本檔案小,執行快,但相對的,其攜帶的資訊也更少。所以開發人員在遇見問題時,都會build乙個debug版本去重現場景,然後通過偵錯程式去發現roo...