注册

CpuDbg x96

查看: 2645|回复: 0
收起左侧

关于调试器几种断点高亮和谁先中断的问题

[复制链接]
发表于 2022-4-25 02:40:12 | 显示全部楼层 |阅读模式

od1.x

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.png

上图是 od2.x . 断点本色和odx64差不多, 就和x64一起介绍.

odx64.png

上图是 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 (调试器已改名, 暂时就叫AsmDbg)

od的断点高亮方案 看着有点乱, 还冲突, 于是 我想把高亮全部放在 地址栏, 不同的断点用不同的高亮.
于是就有上面的效果了. 看起来就像彩虹一样...感觉更乱了...
具体怎么展示不同的断点, 我在想想吧. 尽量让界面不显示的那么突兀.

提几个有意思的问题!如果在一个循环体内的固定一个地址, 下了
硬件访问断点 硬件写入断点 硬件执行断点
内存访问断点 内存写入断点 内存执行断点
INT3断点
同时启用, 哪个断点会最先到达? 这些断点会冲突吗? 你知道吗?
假如最先中断的是INT3断点, 那再 step into 或者 step over, 后面的 硬件 和 内存断点 还会到达吗? 又如何处理呢?  :)

这几个断点单独实现起来都很容易, 但要是全部集中在一起了,处理起来还是有些繁琐的. 如果上面的断点, 再加上 trace, 就真是够喝一壶的了 :(
本人实测 od1.x od2.x yzdbg x64dbg 等调试器, 内存 访问 执行 写入 断点,都是或多或少有些BUG.

to be continued...


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-12-22 05:46 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表