Linux内存映射区域来存储过程

时间:2012-10-02 00:30:12

标签: c memory-management assembly

我有一个问题要求我解释一个过程存储在linux内存映射的哪些区域。这个问题指示我使用objdump -h来查找这些信息。

现在,我对“内存中的区域”的含义感到有些困惑。

我知道对于给定的程序,我们有一些我们使用的寄存器(例如%eax,%edx ...),并且对于每个变量,我们都有一个存储在其中的存储位置(例如8(%ebp)) )。另外我知道我们有%esp和%ebp寄存器来“照顾”堆栈。

我也在我的文件上运行objdump -h但是从我得到的内容中我无法说出具体的内容。

那么我应该只提一下正在使用的寄存器以及存储此过程变量的内存地址吗?

2 个答案:

答案 0 :(得分:3)

我相信你的问题是在操作系统加载时链接器指定你的实际代码驻留在内存中的位置。这段代码将由程序计数器寄存器表示,或者在x86上表示%EIP

通常在Linux上,程序代码和只读变量存储在进程的映射内存的下部区域中,堆栈位于上部区域(即堆栈向下扩展)。

答案 1 :(得分:0)

你可以轻松地在网上搜索linux内存地图,毕竟这是你的功课,你会学习如何解决问题并做研究。

每个程序都有一些细分,这里有几个: bss - 未初始化的数据 数据 - 初始化数据(字符串,数组等......) 文本 - 代码“程序”

部分与程序的起始地址相关,具有正偏移或负偏移。

这是一个很好的页面: http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory