2

我怎么知道地址是否可读?

如果地址不可读或未映射,内核通常会以这样的消息响应BUG: unable to handle kernel paging request at ffffffff80000018

那么,是否有任何函数可以验证特定地址是否可读(或地址范围)?

4

1 回答 1

1

copy_from_user相关函数从一些不受信任的用户空间程序中获取地址;它们通过安装特殊的异常处理程序来防止无效地址。(有关详细信息,请参阅此答案。)

你也可以这样做,但这只能防止内核在页表中标记为无效的地址;访问某些随机设备的 MMIO 范围可能会产生不可预知的结果。

如果您想在某个 BIOS ROM 中搜索某些内容,请像任何其他 PCI 资源一样重新映射该内存。

如果您想在主内存中搜索某些内容,您可以使用一些函数,例如ioremapkmap获取特定物理地址的有效虚拟地址。

于 2013-07-07T17:34:54.720 回答