实验
ELF头部在文件的开始,描述文件的总体格式,保存了路线图,描述该文件的组织情况,即生成该文件系统的字的大小和字节顺序 段头部表用来描述ELF可执行文件与连续的存储段之间的映射关系。节头表包含了描述文件节区的信息,每个节区在表中都有一个项,给出节区的名称、节区大小这类心里。用于链接的目标文件(可重定向文件)必须包含节区头部表,而可执行文件可以没有。
打开gdb进行断点到的设置
本周总结
可执行程序和进程
可执行程序怎么得来的
预处理负责把include文件包含进来及宏替换等工作
可执行文件内部是怎样的
目标文件格式ELF
ABI文件适应二进制指令的目标文件
ELF三种目标文件格式
-可重定位relocatable文件,保持代码和适当数据用来和其他object文件一起创建一个可执行文件或者共享文件,主要是.o文件
-可执行executable文件,保持用来执行的程序,指出exec(BA_OS)如何创建程序进程映像
-共享object文件,保持代码和合适的数据,用来被链接器链接,主要是.os文件
--链接编辑器id(SD_CMD),和其他可重定位和共享object文件创建其他object
--动态链接器,联合一个可执行文件和其他共享object文件来创建一个进程映像
object文件参与程序链接(创建一个程序)和程序的执行(运行一个程序)
一个ELF头在文件的开始,保持了
-路线图road map,描述该文件的组织情况。
-程序头表program Header table,告诉系统如何创建一个进程的内存映像。
-section头表section Header table,包含了描述文件sections的信息。每个section在表中有一个入口,每个入口给出该section名字、大小等信息
当创建或增加一个进程映像时,系统在理论上拷贝一个文件的段到一个虚拟内存段
静态链接的ELF可执行文件与进程的地址空间
可执行文件加载到内存中开始执行的第一行代码
一般静态链接会将所有代码放在一个代码段
动态链接的进程会有多个代码段
装载可执行程序之前的工作
命令行参数和环境变量如何保存和传递、如何进入新程序的堆栈
shell程序→execve→sys_execve然后在初始化新进程堆栈时拷贝进去
线函数调用参数传递,再系统调用参数传递
王潇洋
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000