【发布时间】:2017-08-30 18:52:50
【问题描述】:
x86 调试寄存器(dr0 到 dr3)允许在软件尝试读/写 (intel doc) 时中断特定地址。而且这个配置的地址必须是线性地址。
问题是当启用分页时,同一个物理地址可能会被来自不同任务的几个不同的线性地址映射到。
那么,当我们不知道所有可能的线性别名地址时,如何中断对特定物理地址的访问?
【问题讨论】:
-
同样的老方法:
int 03h在你想要中断的地址 ;) 这是一个单字节指令,并引发了与调试寄存器相同的异常。您可以将原始字节保存在某处(即使在禁用的调试寄存器中!如果上下文允许)。我不知道是否有一个聪明的方法。 -
我应该把
int 03h放在哪里?在我看来,int 03h允许中断指令地址。但是在这里,这条指令(修改内存的内容)是未知的。因此,目标是中断对内存中特定地址的访问,以获取修改存储在该地址的内容的指令。 -
哦,对不起!我误读了你的问题。我不认为你可以打破 R/W 但不幸的是调试寄存器。
-
也许您可以将某些内容锁定到物理内存中。然后打破映射的线性地址将有效地监控支持的物理地址。
-
这是一个奇怪的场景,你将如何访问这个物理地址?如果是内核空间,它会在每个进程上映射相同,如果是用户空间,那么为什么要映射到不同的进程上,否则你如何访问它?
标签: debugging x86 breakpoints paging systems-programming