WinDBG的偽寄存器
$ea
上一條指令中的有效地址(effective address)
$ea2
上一條指令中的第二個有效地址
$exp
表達式評估器所評估的上一條表達式
$ra
當(dāng)前函數(shù)的返回地址(retrun address)。
例如,可以使用g @$ra返回到上一級函數(shù),與gu(go up)具有同樣的效果
$ip
指令指針寄存器。x86中即EIP,x64即eip
$eventip
當(dāng)前調(diào)試事件發(fā)生時的指令指針
$previp
上一事件的指令指針
$relip
與當(dāng)前事件關(guān)聯(lián)的指令指針,例如按分支跟蹤時的分支源地址
$scopeip
當(dāng)前上下文(scope)的指令指針
$exentry
當(dāng)前進程的入口地址
$retreg
首要的函數(shù)返回值寄存器。x86架構(gòu)使用的是EAX,x64是RAX,安騰是ret0
$retreg64
64位格式的首要函數(shù)返回值寄存器,x86中是edx:eax寄存器對
$csp
幀指針,x86中即ESP寄存器,x64是RSP,安騰為BSP
$p
上一個內(nèi)存顯示命令(d*)所打印的第一個值
$proc
當(dāng)前進程的EPROCESS結(jié)構(gòu)的地址
$thread
當(dāng)前線程的ETHREAD結(jié)構(gòu)的地址
$peb
當(dāng)前進程的進程環(huán)境塊(PEB)的地址
$teb
當(dāng)前線程的線程環(huán)境塊(TEB)的地址
$tpid
擁有當(dāng)前線程的進程的進程ID(PID)
$tid
當(dāng)前線程的線程ID
$bpx
x號斷點的地址
$frame
當(dāng)前棧幀的序號
$dbgtime
當(dāng)前時間,使用.formats命令可以將其顯示為字符串值
$callret
使用.call命令調(diào)用的上一個函數(shù)的返回值,或者使用.fnret命令設(shè)置的返回值
$ptrsize
調(diào)試目標(biāo)所在系統(tǒng)的指針類型寬度
$pagesize
調(diào)試目標(biāo)所在系統(tǒng)的內(nèi)存頁字節(jié)數(shù)
可以直接用上表中的名稱來使用偽寄存器,但是更快速的方法是在$前加上一個@符號。這樣,WinDBG就知道@后面是一個偽寄存器,不需要搜索其他符號。
使用windbg在程序的入口點下斷點
1、bp @$exentry
使用偽寄存器的方法,也是最常用的方法
2、bp poi(@$peb+8)+poi(poi(@$peb+8)+poi(poi(@$peb+8)+3c)+28)
3、bp $iment(poi(@$peb+8))