JDu*_*ger 2 process kernel memory stack
我目前正在阅读Robert Love 的Linux Kernel Development。
在“15 进程地址空间”一章中,他打印了进程的内存映射。
user@machine:~$ pmap 1424
#all the processes mapped memory (skipped for readability)
bfffe000 (8KB) rwxp (0:00 0) [ stack ]
Run Code Online (Sandbox Code Playgroud)
最后一行显示堆栈(随着它向下增长)。
他现在说:
堆栈自然是可读、可写和可执行的——否则没有多大用处。
据我所知,我们将堆栈用于数据和代码地址(函数及其参数/变量)。
我不明白为什么堆栈必须是可执行的?
该信息已过时,堆栈通常不再可执行:
00007ffd884fa000 356K rw--- [ stack ]
Run Code Online (Sandbox Code Playgroud)
如果 GCC为嵌套函数调用生成蹦床,则它需要一个可执行堆栈。这些蹦床是在运行时生成的一小段代码,并存储在堆栈中——所以如果使用它们,堆栈需要是可执行的。编译器会跟踪此要求,并在二进制文件(库和可执行文件)中输出一个标志,以指示它们是否需要可执行堆栈。您可以使用execstack(8).
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |