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