我怎么知道地址是否可读?
如果某个地址无法读取或未映射,则内核通常会回复此消息BUG: unable to handle kernel paging request at ffffffff80000018
。
那么,是否有任何函数可以验证特定地址是否可读(或地址范围)?
答案 0 :(得分:1)
copy_from_user
和相关函数从一些不受信任的用户空间程序中获取地址;它们通过安装特殊的异常处理程序来防止无效地址。
(有关详细信息,请参阅this answer。)
您也可以这样做,但这只会保护内核在页表中标记为无效的地址;访问某个随机设备的MMIO范围可能会产生不可预测的结果。
如果要在某些BIOS ROM中搜索某些内容,请像其他任何PCI资源一样重新映射该内存。
如果要在主内存中搜索某些内容,可以使用ioremap
或kmap
之类的函数来获取特定物理地址的有效虚拟地址。