【发布时间】:2011-04-21 13:32:03
【问题描述】:
我理解 rwxps 位的含义。 r-xp 用于 .text。 rw-p 用于 .data/.bss/heap/stack。只使用---p 个页面有什么用?
例如查看cat /proc/self/maps的这个输出
【问题讨论】:
标签: linux memory permissions shared-libraries memory-mapping
我理解 rwxps 位的含义。 r-xp 用于 .text。 rw-p 用于 .data/.bss/heap/stack。只使用---p 个页面有什么用?
例如查看cat /proc/self/maps的这个输出
【问题讨论】:
标签: linux memory permissions shared-libraries memory-mapping
根据man page,表示私有(写时复制)。但是,如果无法读取/写入/执行其中的任何内容,不知道这种映射有什么用处。
可能它是 libc 私有的,允许它修改访问它的权限,而不会被用户程序意外弄乱。
【讨论】:
这也是我想知道的细节。它直到最近几年的某个时候才出现,但我不确定是 GNU binutils 还是 glibc 动态链接器 (ld-linux.so.2) 对这种变化负责。
起初我认为它是一种由动态链接器创建的保护区域,以防止对库数据段的越界访问,但它这么大没有任何意义。它可能是 while 库文件的完整映射,以便动态链接器可以在未来某个时间(可能在 dlopen 或 dlsym 调用期间)再次使其可读,以访问通常不需要的 ELF 元数据被映射。
无论如何,这都是令人讨厌的膨胀,尤其是在虚拟地址空间是宝贵资源的 32 位机器上。它还会使内核页表膨胀,从而增加进程使用的内核空间资源。
附:抱歉,这不是一个真正的答案。我知道这只是可能有助于找到答案的随机点点滴滴,但评论太长了。
【讨论】: