【发布时间】:2015-09-23 03:50:12
【问题描述】:
我尝试使用mmap 函数分配一些具有只读访问权限的内存页面。我打印了/proc/self/maps 来检查内存保护是否有效。即使mmap 的保护参数是PROT_READ,它也显示为这样
7fec0c585000-7fec0c785000 r-xp 00000000 00:00 0
这意味着当我要求内核分配一些只读内存页面时,它也会将它们标记为可执行。
我做了一些其他的测试,我意识到当我要求一个只写页面时,PROT_WRITE没有PROT_READ,maps文件的输出是这样的:
7fec0c585000-7fec0c785000 -w-p 00000000 00:00 0
这意味着除了前面的例子之外,PROT_READ 等同于 PROT_EXEC
同时调用mmap 和PROT_WRITE|PROT_READ,也可以执行。
我想知道有没有办法映射一个只读的、不可执行的内存页;还是一个可读写且不可执行的?
运行测试的计算机信息:
Linux Arch 4.1.6-1-ARCH #1 SMP PREEMPT Mon Aug 17 08:52:28 CEST 2015 x86_64 GNU/Linux
英特尔酷睿 i5-2310、x86_64
【问题讨论】:
标签: linux mmap memory-mapping