【发布时间】:2015-12-30 06:14:05
【问题描述】:
链接目标文件以生成 ELF 文件并确定其虚拟地址。例如,.text 的虚拟地址是 0x8048000。当 ELF 文件要映射到虚拟空间时,另一个 ELF 已经映射到该地址。 操作系统应该做什么? 为什么ELF的虚拟地址在映射到虚拟空间之前就可以确定。
【问题讨论】:
-
因为可执行文件的地址是确定的。
标签: linux linux-kernel operating-system elf
链接目标文件以生成 ELF 文件并确定其虚拟地址。例如,.text 的虚拟地址是 0x8048000。当 ELF 文件要映射到虚拟空间时,另一个 ELF 已经映射到该地址。 操作系统应该做什么? 为什么ELF的虚拟地址在映射到虚拟空间之前就可以确定。
【问题讨论】:
标签: linux linux-kernel operating-system elf
ELF 告诉 Linux 内核它想要放置的位置,如果 Linux 内核接受该地址,它会将其加载到那里。
例如0 无效,因为太低:Why is the ELF execution entry point virtual address of the form 0x80xxxxx and not zero 0x0?
ld 使用配置为使用的链接描述文件确定地址:In an ELF file, how does the address for _start get detemined?
正如 Wyzard 所说,每个进程都有自己的虚拟地址空间。
更准确地说,虚拟地址空间通过分页具有硬件支持:内核设置和使用的How does x86 paging work?。
【讨论】:
每个进程都有自己的私有虚拟地址空间——这就是它是虚拟的意义所在;它不必与程序实际位于物理 RAM 中的位置相对应。所以在不同进程中运行的程序之间没有地址冲突。它们可以全部映射到该地址,每个都在自己的私有地址空间中。
【讨论】: