Linux 内核分析 -- 装载
编译链接的过程,ELF文件格式
![][build-png]
[build-png]: /imgs/gcc-build-process-1.png "生成可执行程序的过程" { width=100%}1
生成可执行程序的过程 2
- C代码(.c)经过编译器预处理生成中间代码(图中未显示),然后编译成汇编代码(.asm)
- 汇编代码(.asm)经过 汇编器,生成目标文件(.o)
- 目标文件(.o) 经过链接器,链接成可执行文件(.out)
- OS将可执行文件加载到内存里执行.
其中,.o文件 和 可执行文件,都是目标文件,Linux上面目标文件格式是
Elf
,window上面是PE格式
。
- 可重定位(relocatable)文件,保存着代码和适当的数据,用来和其它的object文件一起来创建一个可执行文件或者是一个共享文件(主要是.o文件)
- 可执行(executable)文件,保存着一个用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映象(操作系统怎么样把可执行文件加载起来并且从哪里开始执行)
- 一个共享文件(如Linux中的.so,.dso文件)即动态链接库,保存着代码和合适的数据,链接方式有两种,静态链接(装载时连接),动态链接(程序运行时连接)
动态链接库的这两种使用方式
gdb跟踪execve
系统调用
--- 可执行程序的装载过程
设置断点
1
2
3b sys_execve
b load_elf_binary
b start_thread
从哪里开始执行的
Linux 内核分析 -- 装载
http://blog.soul11201.com/2016/04/08/mooc-linux-kernel-7/