如何解决当cpu写入特定地址时,是否可以设置中断?
是否可以在写入特定地址时使 x86 cpu 中断?
我想要一个硬件机制来监控一些地址的变化。
解决方法
我想知道是否可以在写入特定地址时使x86 cpu中断??
这是可能的。
您将调试寄存器之一(level = math.floor( xp / (2000 + (math.floor( xp / 2000) * 200)))
到 DR0
)设置为要监视的地址,然后将 DR4
中的相应标志配置为“全局断点,中断只写数据,1 字节大小”。一旦完成,该 CPU 完成的任何正常数据写入都将触发调试异常(中断 1),并且调试异常处理程序可以弄清楚发生了什么并执行您想要的任何操作(例如向用户报告写入?)。
然而,有一些限制——你不能在用户空间自己做这件事,需要依赖内核的支持;内核的支持希望包括在任务切换期间保存/恢复调试寄存器(这样当您的任务在另一个 CPU 上运行时,您的断点不会停止工作,并且您的断点不会导致其他任务出现问题)。因此(除非您完全控制计算机/CPU - 例如您正在编写自己的内核)通常您必须依赖操作系统提供的任何 API。
如果其他东西修改了内存(例如磁盘控制器或网卡),它也不会工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。