028-C语言-编译总结
2023-07-06 15:37:28 0 举报
C语言-编译总结
作者其他创作
大纲/内容
_start
编译 -S
_libc_start_main函数,它的主要功能如下:1.处理程序的特权级问题2.启动线程3.注册用户程序的fini和rtld_fini参数,然后被at_exit调用,从而完成用户程序和加载器的负责清理工作的函数4.调用其init参数5.调用main函数,并把argc和argv参数,环境变量传递给它6.调用exit函数,并将main函数的返回值传递给它
_libc_csu_init
汇编 -c
ELF Header
IP
操作系统(Linux)
exit
hello.c
gmon_start(初始化进程)
CPU
......
Program Header Tableoptional
Linking View
_init
Figure1-1. Object File Format
库代码lib.so
main
Program Header Table
编译器
a.out可执行文件
预处理-E
执行 gcc 生成ELF文件
汇编器
hello.s
_libc_start_main
链接
ELF文件
1.linux执行程序,需要先将elf文件加载到内存,那么elf怎么描述进程再内存格式?2.linux执行程序时,程序的权限怎么从CPL3切换到CPL0?3.main函数如何被调用?4.从反汇编代码中,我们发现程序是由一个_start函数最终调用 main函数执行的。5._start函数分析: 1)首先,_start是如何启动的? 2)_start函数如何调用_libc_start_main? 3)_libc_start_main参数如何初始化?参数是elf确定6._libc_start_main函数分析: 1)调用init参数设置成了_libc_csu_init函数 2)_libc_csu_init函数调用c语言的先执行init函数,init函数调用gmon_start函数 3)gmon_start函数,初始化进程(到此为止) 4)调用gmon_start函数成功后返回,_libc_start_main开始执行程序main函数
Execution View
hello.i
Section Header Tableoptional
Segment 1
Section Header Table
Section 1
hello.o
Section n
Segment 2
ISA
初始化进程成功返回,_lib_start_main执行main
readelf -a a.out
链接器
系统启动代码
0 条评论
下一页