Windbg断点命令

来源:互联网 发布:接收手机短信的软件 编辑:程序博客网 时间:2024/05/22 07:57

文章转自:http://blog.csdn.net/alex_bn/article/details/6766798

1. 设置断点命令bu bp bm ba

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端口被访问时触发的断点。

 

2. 其它命令bl bc bd be .bpcmds

bl 列举所有断点和它们的状态

bc 删除对应断点

bd 禁用对应断点

be 启用对应断点

.bmcmds 列举所有断点以及创建它们的命令

 

3. 软件断点和硬件断点

1) 软件断点 - 调试工具控制的断点。当调试器在某个地址设置一个断点,它会首先把该地址的内容保存,零时插入一条中断指令(如int3 (0xCC)),当程序执行到该地址是cpu进入调试状态,当调试结束,程序重新载入该地址原先的指令重新执行下去。

 

2) 硬件断点 - 又称为数据断点,是处理器控制的断点,可以用来监控某个内存地址的访问(读、写、执行)和IO地址的访问(读、写)。处理器中有相应的调试寄存器,用来记录数据断点的地址,当该地址(内存地址或IO端口地址)被访问时,断点将被触发,cpu进入调试状态。

 

3) 软件断点和硬件断点的区别

a)理论上我们可以设置无穷多个软件断点,但设置软件断点会使程序变慢,尤其在内核态影响比较大,调试器大多会对断点数量加以限制。例如Windbg在内核态最多支持32个软件断点,在用户态则支持任意多个;硬件断点数量取决于处理器,例如X86支持四个断点(80386有八个调试寄存器-DR0~DR3用于断点,DR4~DR5保留,DR6~DR7用于控制)。

b)软件断点需要修改相应代码,所以它不能调试时flash和rom中的代码;而硬件则没有这个限制。

 

3. 参考资料

1. http://www.lslnet.com/linux/dosc1/59/linux-389058.htm

2. http://blog.csdn.net/wingeek/article/details/4025475

3. http://embexperts.com/viewthread.php?tid=69

4. http://msdn.microsoft.com/en-us/library/ff538903%28v=VS.85%29.aspx

5. http://msdn.microsoft.com/en-us/library/ff538165%28v=VS.85%29.aspx

6. http://msdn.microsoft.com/en-us/library/ff553451%28v=VS.85%29.aspx