gpt4 book ai didi

c - mprotect() 是如何工作的?

转载 作者:太空狗 更新时间:2023-10-29 15:45:32 26 4
gpt4 key购买 nike

我在 stracing linux 内核中的一些常用命令,看到 mprotect() 被使用了很多次。我只是想知道,mprotect() 用来确定它为其设置保护值的内存地址在其自己的地址空间中的决定因素是什么?

最佳答案

在带有 MMU1 的架构上,mprotect() 的地址作为参数是一个虚拟地址。每个进程都有自己独立的虚拟地址空间,所以只有两种可能:

  • 请求的地址在进程自己的地址范围内;或
  • 请求的地址在内核的地址范围内(映射到每个进程)。

mprotect()通过更改附加到 VMA2 的标志在内部工作。它必须做的第一件事是查找与传递的地址对应的 VMA - 如果传递的地址在内核地址范围内,则没有 VMA,因此此搜索将失败。如果您尝试更改未映射的地址空间区域的保护,就会发生同样的事情。

您可以通过检查 /proc/<pid>/smaps 查看进程地址空间中 VMA 的表示或 /proc/<pid>/maps .


<补充>1。内存管理单元
<补充>2。虚拟内存区域,一种描述进程内存连续部分的内核数据结构。

关于c - mprotect() 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3825018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com