方法1:
1> 先用DeviceTree.exe查看指定的過濾驅(qū)動的Load Address(加載地址)
2> 再用LordPE.EXE查看指定過濾驅(qū)動文件的入口點(diǎn)地址
3> 計(jì)算過濾驅(qū)動的DriverEntry函數(shù)內(nèi)存地址 DriverEntry函數(shù)內(nèi)存地址 = Load Address + 入口點(diǎn)地址
例子:
1> Load Address = 0xFAABF000
2> 入口地址 = 0x3400
3> Windbg下斷點(diǎn) bu 0xFAABF000+0x3400
方法2:
1> 先用DeviceTree.exe查看指定的過濾驅(qū)動的Service Name
2> 再用LordPE.EXE查看指定過濾驅(qū)動文件的入口點(diǎn)地址
3> 計(jì)算過濾驅(qū)動的DriverEntry函數(shù)內(nèi)存地址 DriverEntry函數(shù)內(nèi)存地址 = Service Name + 入口地址
例子:
1> Service Name是 ntfs
2> 入口地址 = 0x3400
3> Windbg下斷點(diǎn) bu ntfs+0x3400
方法3:
在windbg調(diào)試時(shí),通過u Module!DriverEntry看到機(jī)器指令,然后選一個恰當(dāng)?shù)牡刂罚ɑ蛘咧苯覦riverEntry第一條指令的地址也可)比如是f8399695,那么,直接bu f8399695即可。
或者有符號文件,則直接 bu Module!DriverEntry
方法4:
編寫源代碼時(shí),在DriverEntry開頭,加
#ifdef DBG
_asm int 3
#endif
那么,調(diào)試時(shí),執(zhí)行到DriverEntry的int 3,自然會停下來。
DriverEntry
補(bǔ)充:注意,在DriverEntry處下斷點(diǎn),最好是用bu命令,而不是bp命令。
bu命令用來設(shè)置一個延遲的、以后再求解的斷點(diǎn),對未加載模塊中的代碼設(shè)置斷點(diǎn)。
實(shí)現(xiàn)原理:當(dāng)指定模塊被加載時(shí),才真正設(shè)置這個斷點(diǎn)。
對動態(tài)加載模塊的入口函數(shù)或初始化代碼處 加斷點(diǎn)特別有用。