1

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

现在,我有点困惑“内存中的区域”是什么意思。

我知道对于给定的过程,我们有特定的寄存器可以使用(比如 %eax、%edx ...),并且对于每个变量,我们都有一个存储位置(比如 8(%ebp))。此外,我知道我们有 %esp 和 %ebp 寄存器来“照顾”堆栈。

我还在我的文件上运行 objdump -h 但从我得到的信息中我无法说出任何具体的内容。

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

4

2 回答 2

3

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

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

于 2012-10-02T00:36:07.613 回答
0

您可以轻松地在互联网上搜索 linux 内存映射,毕竟这是您的家庭作业,您将学习如何解决问题和进行研究。

每个程序都有特定的段,这里有几个: bss - 未初始化的数据 data - 初始化的数据(字符串、数组等...) text - 代码“程序”

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

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

于 2012-10-02T00:39:51.900 回答