鏈接目標文件以生成ELF文件並確定其虛擬地址。例如,.text的虛擬地址是0x8048000。當ELF文件將被映射到虛擬空間時,另一個ELF文件已經被映射到這個地址。 操作系統應該做什麼? 爲什麼在映射到虛擬空間之前可以確定ELF的虛擬地址。爲什麼在映射到虛擬空間之前可以確定ELF的虛擬地址?
回答
每個進程都有它自己的私有虛擬地址空間 - 這就是它的虛擬點;它不必與程序實際位於物理RAM中的位置相對應。所以在不同進程中運行的程序之間沒有地址衝突。他們可以將全部映射到該地址,每個地址都在其自己的專用地址空間中。
但問題不是關於不同的進程 - 而是關於不同的共享對象在**相同的進程**中映射的。 –
@ el.pescado問題沒有提到共享庫。但是,這些應該是可重新定位的,因此地址在那裏也不重要。 –
謝謝!我誤解了一些概念,並且已經說清楚了。每個進程都有其虛擬地址空間。每個過程都是獨立的。 Tnanks! – haolee
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?內核設置和使用。
- 1. 將內核空間虛擬地址映射到Windows 10驅動程序中的用戶空間虛擬地址
- 2. 虛擬地址空間
- 3. 在虛擬地址空間中使用內存映射文件
- 4. 將虛擬地址映射到特定物理地址
- 5. 試圖映射上BIOS的內存虛擬地址空間
- 6. 內核虛擬地址空間中的高內存映射
- 7. 轉換DMA映射虛擬地址
- 8. ELF中的虛擬和物理地址
- 9. 映射虛擬地址到物理地址的含義是什麼?
- 10. 虛擬地址空間vs虛擬內存
- 11. 將物理地址映射到虛擬地址linux
- 12. 虛擬地址映射到物理地址
- 13. 虛擬地址到物理地址映射
- 14. 虛擬地址
- 15. 虛擬地址空間和尋呼
- 16. 如何分頁虛擬地址空間?
- 17. 多線程虛擬地址空間?
- 18. 虛擬地址空間碎片
- 19. 可以將一個DLL映射到兩個進程的虛擬地址空間中不同的虛擬地址嗎?
- 20. 虛擬IP地址
- 21. elf文件中段的虛擬地址和物理地址
- 22. VA(虛擬地址)&RVA(相對虛擬地址)
- 23. 內存模塊是否映射到進程的虛擬空間?
- 24. 處理虛擬地址空間和內核地址空間?怎麼樣?
- 25. Linux進程虛擬地址空間的地址範圍
- 26. 虛擬地址系統上的進程地址空間
- 27. 如何將物理地址映射到不同大小的虛擬地址?
- 28. 可變分區方案中的虛擬地址空間
- 29. 將虛擬目錄映射到Azure AppService
- 30. 虛擬機經典和虛擬機在天藍色之間有什麼區別?
因爲可執行文件的地址已確定。 – Jichao