ollydbug设置断点
INT 3断点
把当前指令换成INT 3指令,产生断点,但是ollydbug上还是显示的原指令,
优点:可以设置无数个
缺点:容易被检测出来只要检查指令的前一个字节看看是不是CC,
使用:可以用F2或bp来创建和取消断点
硬件断点
跟DRx调试寄存器有关,原理是用DR0-DR3来设定地址,DR7来设定状态
优点:不会修改代码
缺点:只能设置4个
使用:右键菜单中的“BreakPoint"->“Hardware,on execution”
删除:单击菜单选项Debug->Hardware breakpoints打开硬件断点面板然后删除
硬件断点实现和内存断点相似功能
使用:右键菜单中的“BreakPoint"->“Hardware,on write”,选择需要设断的大小最大4个字节,而硬件的写入断点是停在写入指令的小一条,而内存断点是停在写入那一条
内存断点
内存断点的原理是给指定内存赋予不可访问会写的操作,这样当程序访问或写该块内存时就会产生异常而中断,
优点:不修改代码
缺点:由于总要判断是不是内存断点导致的中断所以会降低程序运行速度,只能有一个
使用:可在数据窗口选中需要下段的区域右键“BreakPoint"->“Memory,on write”
删除:“BreakPoint"->“Remove memory breakpoint”
内存一次性断点
ALT+M快捷键显示内存,右键菜单,"Set break-on-acess"在访问上设断,不过是一次性断点当停止后这个断点就被取消了
消息断点
当特定的窗口收到特定的消息而产生消息中断,所以说消息断点只能在窗口已经创建时才可以设置
使用:按工具栏中的“W”打开窗口界面,里面会列出各窗口的参数,选中一个右键"Message breakpoint on ClassProc"然后会弹出一个窗口选择需要的那个特定的消息。
条件断点
满足一定条件就会停的断点
按寄存器条件中断
按shift+F2在弹出的窗口中输入表达式条件eg:eax=1234
按存储器条件中断
按shift+F2在弹出的窗口中输入表达式条件这时可以指定参数
eg:[STRING [ESP+4]]==“c://1212.txt”,STRING在ollydbug的解释是以0结尾的ASCII字符
条件记录断点
不仅有断点的功能而且可以记录断点处的函数表达式和参数,也可以指定断点要断的次数
使用:在要断的函数第一行按Shift+F4打开设置界面。
在condition中设置条件
在explanation中设置一个名称
在expression中设置要记录的内容的条件eg:要记录eax就填eax
在Decode value of expression as 中选择正确的解码表达式
本文参考加密与解密第四版