关于虚拟内存

时间:2012-01-06 17:28:10

标签: security buffer-overflow virtual-memory

我有关于虚拟内存的这个微妙的问题。在一本书中我读到了这句话

  

执行ELF文件时,将加载文本和两个数据段   进入虚拟内存的独立区域

但是如果我们例如编译一个由两个源文件组成的C程序而没有链接它会产生两个目标文件。在两个目标文件中,寻址从零开始。然后,如果我们将两个目标文件链接到一个可执行文件并检查它,我们将观察到寻址不再从零开始,而是已经为每个段分配了一些地址。据我所知,这个分配的地址是一个虚拟内存地址。所以我有两个问题:

  1. 所以我更正确的是链接器从OS请求一些虚拟内存范围并将其分配给程序段?
  2. 当他说在执行流程时分配虚拟地址时,引用的作者是什么意思?

1 个答案:

答案 0 :(得分:3)

链接器将分配一个虚拟地址,该地址可用作加载段的“基础”。所以是的,链接器确实分配了虚拟地址库。操作系统只是将此内存映射到物理地址。分配是操作系统将物理地址分配给虚拟地址。