c - 用于存储程序的 Linux 内存映射区域

标签 c memory-management assembly

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

现在,我有点搞不清楚“内存中的区域”是什么意思。

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

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

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

最佳答案

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

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

关于c - 用于存储程序的 Linux 内存映射区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683003/

相关文章:

c - 如何在 C 中以编程方式哈希 PEM 格式的 X509 证书

assembly - x86 汇编内存 - "add"指令的作用是什么?

assembly - 如何在反汇编的C/C++程序中重建类型和数据结构?

java - 调用使用 libhdfs 的程序时出现 loadFileSystems 错误

c - Telnet拒绝简单TCP服务器上的连接

c - 在函数中将数组声明为静态的目的是什么?

在 struct 中为 char 数组创建指针大小的内存

c++ - 如何保证进程调用malloc()时立即分配物理内存?

linux - 如何确定 Linux 中进程的最大内存使用量?

html - ASM x86 整数溢出