od1.x
上图是od1.x
od1.x 断点粗看只有一种颜色, 就是下断就红色. 没下断或禁用断点, 就是默认色.
但仔细一看,还是有另外两种颜色的.(下面我列出od1.x断点几种颜色的区别)
1. 无断点 未选中 (正常色, 默认色)
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
2. 无断点 被选中 (除高亮部分整行 灰底 黑字)
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
3. INT3断点, IP指向此处, 断点启用. 黑底红字
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
4. INT3断点, IP指向此处, 断禁用. 黑底白字
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
5. INT3断点, IP指向别处, 断点启用. 红底黑字
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
6. INT3断点, IP指向别处, 断禁用. 白底灰字
0040D07C |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
7. 硬件断点, 禁用 启用
8. 内存断点
9. 及其它
7 8 9 全部和 1一样 都是正常色
上图是 od2.x . 断点本色和odx64差不多, 就和x64一起介绍.
上图是 odx64.
1. 无断点 未选中 (正常色, 默认色)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
2. 无断点 被选中 (除高亮部分整行 灰底 黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
3. INT3断点, IP指向此处, 断点激活. 黑底红字
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
4. INT3断点, IP指向此处, 断点禁用. 黑底白字
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
5. INT3断点, IP指向别处. 断点启用. 红底黑字
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
6. INT3断点, IP指向别处. 断点禁用. 黄底黑字
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
7. 硬件断点, 启用 (地址栏颜色不变, HEX区 首字节变 红底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
8. 硬件断点, 禁用 (地址栏颜色不变, HEX区 首字节变 黄底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
9. 内存断点, 启用 (地址栏颜色不变 HEX区颜色全部改变 红底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
10. 内存断点, 禁用 (地址栏颜色不变 HEX区颜色全部改变 黄底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
11. 硬件断点 内存断点 INT3断点 全部启用 (全部 红底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
12. 硬件断点 内存断点 INT3断点 全部禁用 (全部 黄底黑字)
7FF7_B036973B FF15 57D75F00 CALL QWORD PTR [REL <&KERNEL32.GetSystemTimeAsFileTime>]
写到这里, 大家应该能看的出来 硬件断点和内存断点的高亮提示冲突了. 如果这两个断点同时启用,在反汇编窗口中是无法判断 硬件断点是否启用.
AsmDbg
上图是AsmDbg (调试器已改名, 暂时就叫AsmDbg)
od的断点高亮方案 看着有点乱, 还冲突, 于是 我想把高亮全部放在 地址栏, 不同的断点用不同的高亮.
于是就有上面的效果了. 看起来就像彩虹一样...感觉更乱了...
具体怎么展示不同的断点, 我在想想吧. 尽量让界面不显示的那么突兀.
提几个有意思的问题!如果在一个循环体内的固定一个地址, 下了
硬件访问断点 硬件写入断点 硬件执行断点
内存访问断点 内存写入断点 内存执行断点
INT3断点
同时启用, 哪个断点会最先到达? 这些断点会冲突吗? 你知道吗?
假如最先中断的是INT3断点, 那再 step into 或者 step over, 后面的 硬件 和 内存断点 还会到达吗? 又如何处理呢? :)
这几个断点单独实现起来都很容易, 但要是全部集中在一起了,处理起来还是有些繁琐的. 如果上面的断点, 再加上 trace, 就真是够喝一壶的了 :(
本人实测 od1.x od2.x yzdbg x64dbg 等调试器, 内存 访问 执行 写入 断点,都是或多或少有些BUG.
to be continued...
|