这个存储区是做什么用的?

时间:2018-11-27 19:02:10

标签: c virtual-memory

当我运行C程序并检查其/ proc / PID / maps文件时,我看到有关可执行文件的以下三行内容:

1:

00400000-00401000 r-xp 00000000 08:03 38404099 /previous_path/a.out

2:

00600000-00601000 r--p 00000000 08:03 38404099 /previous_path/a.out

3:

0601000-00602000 rw-p 00001000 08:03 38404099 /previous_path/a.out

我认为第一个存储代码,第三个存储全局变量,但是我不知道第二个用于什么。有人可以向我解释吗?

1 个答案:

答案 0 :(得分:0)

让我尝试以常规模式回答此问题。可执行文件是一组指令,指导加载程序如何设置程序的地址空间。加载程序将按照这些说明将页面映射到进程地址空间。

所有有效页面都将可读。因此,您只需要处理

的组合

可执行(X)和可写(W)

给出了可能的组合

R
RX
RXW
R W

RXW不常见,但确实发生。我已经看到了对指令进行编码并在运行时进行解码的应用程序。我们可以忽略这种情况。实际上,剩下的是:

R      Readonly (Data, such as strings or numeric constants, tabular data)
RX     Code
R W    Read Write (static, global, stack, heap, etc.)

如果您有类似的东西

 const char something [] = "SOMETHING" ;

“ SOMETHING”文本可能会出现在只读页面中。