本文参考: https://www.jianshu.com/p/84d96a6385b0
https://zhuanlan.zhihu.com/p/148426554?from_voters_page=true
https://www.cnblogs.com/qscfyuk/p/11697816.html
https://www.cnblogs.com/icecri/p/4438351.html
一、概念
1.可执行文件
可执行文件属于elf文件,进程加载程序就是加载可执行文件,可执行文件包含很多section,如以代码段为代表的权限为可读可执行的段;以数据段和BSS段位代表的权限为可读可写的段;以只读数据段位代表的权限为只读的段,进程创建时所加载的程序信息即为这些部分。Linux中保存节的时候是以“页”为单位的(物理内存也同样是分页的,他们一一对应,一页一般是4096字节,也就是4k),不够一页的也要占用一页的空间;
ELF可执行文件默认加载到内存0x8048000这个位置,从这个位置开始加载。前面加载ELF可执行文件的头部信息,但因不同文件大小不同,程序的实际入口为:0x8048x00,图例为0x8048300,也就是说这个位置是程序的实际入口地址,即刚加载过可执行文件的进程(一个进程加载了新的可执行文件之后,开始执行的入口点),就是从这个地方开始执行
elf文件相关详见:https://www.cnblogs.com/qscfyuk/p/11697816.html
2.进程虚拟地址空间
每个进程都有自己4G(32位系统)的虚拟地址空间,实际上并不是每个进程在磁盘或内存上有这么大空间,而是进程的可寻址空间为4G(32位系统,寻址范围为0x0000 0000~0xFFFF FFFF)
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理