【发布时间】:2011-09-02 08:40:26
【问题描述】:
我有一组关于/dev/mem的问题:
网上很多文章,好像把
/dev/mem作为"Physical RAM"的网关。但如果我是对的,/dev/mem是处理器的"Physical Address Space"的网关,它可能包括许多硬件外设的控制寄存器,而不仅仅是 RAM?如果我错了,请纠正我!为了防止攻击者滥用
/dev/mem和更改内核内存,需要启用标志CONFIG_STRICT_DEVMEM,以防止用户应用访问超过1MB 的物理地址空间。我检查了我的电脑(Ubuntu)上的配置文件,发现CONFIG_STRICT_DEVMEM = y。我写了一个程序,它试图读取超过 1 MB 的物理内存,我能够读取!没有分段错误或任何Operation NOT Permitted错误。这怎么可能?
我的程序大致是这样的:
fd = open ( "/dev/mem", O_RDWR);
ptr = (int*) mmap(0, MAP_SIZE, PROT_READ, fd, myAddress & (~MAP_MASK));
printf("%d", *ptr);
【问题讨论】:
-
您实际上是在阅读还是只是在映射它?
标签: linux memory linux-kernel