首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mprotect()是如何工作的?

mprotect()是如何工作的?
EN

Stack Overflow用户
提问于 2010-09-30 03:12:24
回答 2查看 3.8K关注 0票数 3

我对linux内核中的一些常用命令进行了分析,看到很多次都使用了mprotect()。我想知道的是,什么是决定因素,用来找出它正在设置保护值的内存地址是否在它自己的地址空间中?

EN

回答 2

Stack Overflow用户

发布于 2010-09-30 03:25:32

这是关于virtual memory的。还有关于dynamic linker/loader的。您在跟踪中看到的大多数mprotect(2)系统调用可能与引入库依赖项有关,尽管malloc(3)实现可能也会调用它。

编辑:

在注释中回答你的问题- MMU和内核中的代码保护一个进程不受另一个进程的影响。每个进程都有一个完整的32位或64位地址空间的假象。您操作的地址是虚拟,并且属于给定的进程。在硬件的帮助下,内核将这些内存页面映射到物理内存页面。这些页面可以在进程之间隐式地作为代码共享,也可以显式地用于进程间通信。

票数 3
EN

Stack Overflow用户

发布于 2010-09-30 03:41:08

内核会在当前进程的页表中查找您传递给mprotect的地址。如果它不在那里,那么它就失败了。如果它在那里,内核可能会尝试用新的访问权限标记该页。我不确定,但如果有一些特殊的原因导致无法授予访问权限(例如,试图将内存映射共享文件区域的权限更改为可写,而该文件实际上是只读的),则内核仍有可能在此处返回错误。

请记住,处理器用来确定某个内存区域是否可访问的页表并不是内核用来查找该地址的页表。处理器的表中可能有空洞,用于存储交换到磁盘的页面等内容。这些表是相关的,但并不相同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3825018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档