所有现代* nix操作系统都使用虚拟内存概念(使用分页)。据我所知,这种虚拟内存的概念被用来设置程序员和真实物理内存之间的抽象层:程序员不必局限于内存大小,他可以将程序视为一个大的数据,指令,堆栈和栈的连续空间(根据该概念操纵指针)。当我们编译&链接一个源代码时,我们得到一个存储在HDD上的可执行文件,称为ELF,该文件包含除了堆栈和堆大小(仅在运行时创建)等附加信息之外的程序的所有数据和指令。虚拟内存中ELF二进制文件的布局
现在我的问题:
1. How does this binary file (elf) is mapped to virtual memory ?
2. Does every process has its own virtual memory (a page file !!!) ?
3. What is the program's layout after being mapped to virtual memory ?
4. What is exactly the preferred base address and how does it look in virtual memory ?
5. What is the difference between a RVA and an Offset ?
您不必回答所有的问题或给出详细的答案,而不是你能给我提供这个话题好充分的读数,谢谢。
您可能想阅读我撰写关于此的摘要,http://www.gabriel.urdhr。fr/2015/01/22/elf-linking/ – ysdx
你可以在http://stackoverflow.com/questions/33756119/relationship-between-vma-and-elf-segments找到有关ELF文件在内存中映射的信息。 – ysdx
@ysdx thnx,这对我非常有帮助,并且我已经介绍了新的想法。 – afr0ck