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