Linux内核分析(第七周)
可执行程序的装载
一、预处理、编译、链接和目标文件的格式
1.可执行程序怎么来的?
预处理:
gcc -E -o hello.cpp hello.c -m32
*负责把include的文件包含进来及宏替换
编译:
gcc -x cpp-output -S -o hello.s hello.cpp -m32
gcc -x assembler -c hello.s 0o hello.o -m32
hello.s 汇编代码
hello.o 二进制文件
链接:
gcc -o hello hello.o - -m32
2.目标文件的格式ELF
A.out COFF (PE+ELF)
三种类型:
可重定位文件
可执行文件
共享文件
Entry point address 程序的起点
3.静态链接的ELF
静态链接会将所有代码放在一个代码段
动态链接会有多个代码段
二、可执行程序,共享库,和动态链接
1.装载可执行程序程序之前的工作
执行环境:命令行+参数
*shell本身不限制命令行参数的个数
*shell会调用execve将命令行参数和环境参数传递给main函数
shell>execve>sys_exceve
*初始化新程序堆栈时拷贝进去
*先函数调用参数传递,再系统调用参数传递
2.装载时动态链接和示例
三、可执行程序的装载
1.相关关键问题分析
fork先返回父进程一次;再返回ret_from_fork开始执行然后返回用户态
sys_execve:
do_exceve>do_execve_common>exec_binprm
通过修改内核堆栈中EIP的值作为新程序的起点
2.sys_exceve的内部处理
对于静态链接的文件elf_entry是新程序执行的起点
3.gdb跟踪
new_ip是返回到用户态的第一条指令的地址
实验:
1、
静态链接
动态链接
动态链接是当需要某个头文件时动态的去库中去找,并不用像静态链接那样去提前全部加载进去。这样链接出来的文件相对来说空间较小,但是效率略逊于静态链接。
动态链接分装载时动态链接和运行时动态链接。两者在gcc下指令相同,但是使用方式略有不同。
Linux下的三种目标文件格式
1.可重定位文件( .o ):二进制代码和数据,由各个数据节(section)构成,从地址0开始。
2.可执行文件:可运行的二进制代码和数据。
3.共享目标文件( .so ):一种特殊类型的可重定位目标文件,动态加载链接。
Linux上,目标文件的格式称为可执行和可链接格式(ELF)
2.步骤
rm -rf menu
git clone
https:///mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs

qemu -kernel linux-3.18.6/arch/x86/boot
Image -initrdrootfs.img -s -S
打开gdb进行远程调试
gdb
file linux-3.18.6
mlinux
target remote:1234
B sys_execve
B load_elf_binary
B start_thread


linux首先创建父进程,然后通过调用fork()系统调用创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件。 主进程继续返回等待新进程执行结束,然后重新等待用户输入命令。execve()系统调用被定义在unistd.h。
对于ELF格式的可执行文件,按照格式要求加载到内存中相应的地址空间,如果是静态链接的就将文件头部标明的入口地址作为开始;如果是依赖动态链接库的可执行文件则需要将动态链接器ld的入口地址作为开始。
Linux内核分析(第七周)的更多相关文章
- LINUX内核分析第七周学习总结:可执行程序的装载
LINUX内核分析第七周学习总结:可执行程序的装载 韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- Linux内核分析 第七周 可执行程序的装载
张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...
- LINUX内核分析第七周学习总结
LINUX内核分析第七周学习总结 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.c ...
- Linux内核分析第七周———可执行程序的装载
Linux内核分析第七周---可执行程序的装载 李雪琦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/US ...
- Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序
Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...
- LINUX内核分析第七周学习总结——可执行程序的装载
LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cours ...
- 20135327郭皓--Linux内核分析第七周 可执行程序的装载
第七周 可执行程序的装载 郭皓 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ...
- linux内核分析 第七周
一.课堂相关 (一)预处理.编译.链接和目标文件的格式 1.可执行程序是怎么得来的 C代码--预处理--汇编代码--目标代码--可执行文件 预处理负责把include的文件包含进来及宏替换工作. he ...
- "Linux内核分析"第七周
可执行程序的装载 张文俊+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.预 ...
- Linux内核分析——第七周学习笔记20135308
第七周 可执行程序的装载 一.预处理.编译.链接和目标文件的格式 1.可执行程序是怎么来的 C代码—>预处理—>汇编代码—>目标代码—>可执行文件 .asm汇编代码 .o目标码 ...
随机推荐
- 在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
越来越多的浏览器不在支持http协议了,这就要求你为你的网站必须绑定SSL证书.谷歌浏览器也将要在今年取消对http协议的支持,申请CA证书迫在眉睫.我购买有两个域名,一个虚拟机,没事鼓捣鼓捣,图个乐 ...
- 11LaTeX学习系列之---LaTeX的特殊字符
目录 目录 前言 (一)源代码 (二)输出效果 目录 本系列是有关LaTeX的学习系列,共计19篇,本章节是第11篇. 前一篇:10LaTeX学习系列之---Latex的文档结构 后一篇:12LaTe ...
- Hive-1.2.1_02_简单操作与访问方式
1. Hive默认显示当前使用库 .需要用时,即时配置,在cli执行属性设置,这种配置方式,当重新打开cli时,就会生效: hive> set hive.cli.print.current.db ...
- Class doesn't contain any JAX-RS annotated method
项目中使用了Jersey RESTful风格的注解 , 根据错误提示就知道了 , 在类中没有带注解的方法 ,所以只要在方法上添加 @path() 注解就行了,至少要有一个方法带有Jersey注解
- Discrete Logging ZOJ - 1898 (模板题大小步算法)
就是求Ax三B(mod C)当C为素数时 #include<cstdio> #include<cstring> #include<cmath> #include&l ...
- jquery $("[id$='d']").val();这句话什么意思?
获得id后缀为d字符的值.应该是属于input标签.谢谢 匹配给定的属性是以某些值结尾的元素,比如<span id="ad">test</span>< ...
- Linux内核poll内部实现
前言 poll机制用于实现IO多路复用.所谓IO多路复用,通俗的讲,其实就是线程复用,使其能在一个线程上处理多个IO. 用户空间 用户通过调用用户空间的poll函数使用该机制. 驱动部分的实现 用户如 ...
- Intel CPU 漏洞分析
Intel CPU漏洞分析报告 预备知识 存储分级 由于计算机存储分级的特性(第一级:寄存器,第二级:高速缓存,第三级:内存,第四级:磁盘),每一级之间的访问速度差距高达数量级.所以处理器会将用到的数 ...
- AI 线性回归
线性回归(Linear Regression),顾名思义,输出是输入的线性函数.因为通常会附加偏置(bias)参数,所以实际是仿射函数. 参考链接: http://cs229.stanford.edu ...
- Tarjan学习笔记
\(Tarjan\)是个很神奇的算法. 给一张有向图,将其分解成强连通分量们. 强连通分量的定义:一个点集,使得里面的点两两可以互相到达,并且再加上另一个点都无法满足强连通性. \(Tarjan\)的 ...