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