以消息为导向的有限状态机理念Windows程序设计笔记(汇编) (2) 内存的内存断点和硬件断点的区别

发布于 2021-08-23  41 次阅读


背景

根据Windows内存处理机制,任何内存当中的内容都是分页加载的,而在保护模式下,内存页有许多属性,包括可不可读,写,运行等

正文

内存的内存断点是软件层面(操作系统这个大软件和调试软件本身)控制的

如果是写入断点则设置页属性PAGE_EXECUTE_READ,不可写,一旦写入就会掷错,这也从一定程度上证明了断点属于一种异常

如果是访问断点就设置PAGE_NOACCESS,禁止访问,然后catch exception

现在有一个小问题,如果是同页但是非目标地址的内存,也会被断点,这需要调试器层面放行,但是有点想象不出来如何实现这种放行

硬件断点则是cpu硬件层面的

在CPU硬件层面提供多个寄存器用于描述目标内存对象,一旦cpu访问或写入该对象则断下断点,效率比前者高了很多个数量级