Operating system 在用户模式下,应用程序永远不会知道其内存所在的物理地址,那么为什么链接器会为所有部分提供物理地址呢?

Operating system 在用户模式下,应用程序永远不会知道其内存所在的物理地址,那么为什么链接器会为所有部分提供物理地址呢?,operating-system,Operating System,在用户模式下,应用程序永远不会知道其内存所在的物理地址,那么为什么链接器会为所有部分提供物理地址呢?如下图所示: 程序头 Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align ------------------------------------------------------------------------ PHDR 0x000034 0x08048034 0x0

在用户模式下,应用程序永远不会知道其内存所在的物理地址,那么为什么链接器会为所有部分提供物理地址呢?如下图所示:

程序头

  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  ------------------------------------------------------------------------
  PHDR           0x000034 0x08048034 0x08048034 0x00120 0x00120 R E 0x4
  INTERP         0x000154 0x08048154 0x08048154 0x00013 0x00013 R   0x1
  LOAD           0x000000 0x08048000 0x08048000 0x0065c 0x0065c R E 0x1000
  LOAD           0x000f14 0x08049f14 0x08049f14 0x00100 0x00108 RW  0x1000
  DYNAMIC        0x000f28 0x08049f28 0x08049f28 0x000c8 0x000c8 RW  0x4
  NOTE           0x000168 0x08048168 0x08048168 0x00044 0x00044 R   0x4
  GNU_EH_FRAME   0x00053c 0x0804853c 0x0804853c 0x0003c 0x0003c R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4
  GNU_RELRO      0x000f14 0x08049f14 0x08049f14 0x000ec 0x000ec R   0x1

同一个链接器可能支持内核模式代码。也就是说,在用户模式下,加载程序在内存中加载elf时忽略物理地址?linux中的loader上有好的文档吗?@Techie-最终在执行时,所有虚拟地址不都应该映射到物理地址吗?