链接目标文件以生成ELF文件并确定其虚拟地址。例如,.text的虚拟地址是0x8048000。当ELF文件将映射到虚拟空间时,另一个ELF已映射到此地址。 操作系统应该做什么? 为什么ELF的虚拟地址在映射到虚拟空间之前可以确定。
答案 0 :(得分:3)
每个进程都有自己的私有虚拟地址空间 - 它是虚拟的;它不必与程序实际位于物理RAM中的位置相对应。因此,在不同进程中运行的程序之间没有地址冲突。它们可以 all 映射到该地址,每个地址都在自己的私有地址空间中。
答案 1 :(得分:0)
ELF告诉Linux内核要放置它的位置,如果Linux内核接受该地址,则将其加载到那里。
E.g。 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?。