windbg 符号加载
首先添加符号,打开 windbg 工具栏 file->Symbol File Path .... 写入路径如下所示
SRV*E:\\tools\win7-sp1-x86*
然后勾选左下角的Reload , 确定
执行下面执行强制加载符号
kd> .reload /f
查看是否加载了符号
kd> lm
如果在模块后面出现 符号的路径就表示成功了,有些没有加载成功,没关系。
无符号调试驱动的两种方法
方法一:用loadPE打开驱动,查看OEP(路口点地址)如下所示
然后在windbg中执行如下命令进行下断点
kd> bp 驱动名称不含扩展名+0x6000
运行windbg后,使用工具加载驱动,驱动启动后会自动断下来
方法二:有时以上方法断不下来,就需要用到该方法,首先loadPE打开驱动文件,将OEP复制,然后点击位置计算器,将路口点粘贴,计算。
将路口点的第一个字节改成cc,让程序断下来,记得保存。(需要记住被修改的值,一般情况下为0x55。)
保存好后从新计算一下校验和 点击?然后保存退出
不用下断点,当程序加载执行后windbg 会断下来,这时只需将该位置的汇编改回来就可以在路口点调试了
kd> eb eip 0x55
windbg指令
1. 清屏命令
kd> .cls
2. u命令(反汇编)
kd> u .
查看当前的8条反汇编
kd> u . L30
查看当前0x30条反汇编
kd> uf .
反汇编当前整个函数
kd> ub .
反汇编之前的8条指令
设置断点命令bu bp bm ba
下断点可以是地址也可以是函数名
kd> bu NT!ZwCreateFile
1) bu bp bm设置软件断点
a). bp设置地址关联的断点
b). bu设置符号关联的断点
c). bm支持设置含通配符的断点,可以一次创建一个或多个bu或bp (bm /d)断点
bp和bu的主要区别
a) bp所设断点和地址关联,如果模块把该地址的指令移到其它地方,断点不会随之移动,而是依然关联在在原来的地址上; 而bu所设断点是和符号关联,如果符号的地址改变了,断点依然保持和原来的符号关联。
b) 如果bp所设断点的地址在加载的模块中被找到,后来软件模块被卸载,断点会被自动移除;而bu所设断点则会一直存在。
c) bp设置的断点不会被保存windbg的workspace中,bu设置的断点会则会被保存下来。
2)ba设置硬件断点(数据断点)
硬件断点是指当一个内存地址被访问(读、写、执行)或IO端口被访问时触发的断点。
其它命令bl bc bd be .bpcmds
bl 列举所有断点和它们的状态
bc 删除对应断点
bd 禁用对应断点
be 启用对应断点
.bmcmds 列举所有断点以及创建它们的命令