这个内存区域是做什么用的?
What is this memory region for?
当我 运行 我的 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
我觉得第一个存放代码,第三个存放全局变量,但我不知道第二个是干什么用的。谁能给我解释一下?
让我尝试以一般模式回答这个问题。可执行文件是一组指示加载程序如何设置程序地址的指令space。加载程序将按照这些指令将页面映射到进程地址 space。
所有有效页面都将变为可读。所以你只处理
的组合
可执行 (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 可能会出现在只读页面中。
当我 运行 我的 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
我觉得第一个存放代码,第三个存放全局变量,但我不知道第二个是干什么用的。谁能给我解释一下?
让我尝试以一般模式回答这个问题。可执行文件是一组指示加载程序如何设置程序地址的指令space。加载程序将按照这些指令将页面映射到进程地址 space。
所有有效页面都将变为可读。所以你只处理
的组合可执行 (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 可能会出现在只读页面中。