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目标码 ...
随机推荐
- Nginx主程序使用介绍
守护进程和服务 <br\>在首次运行Nginx之前,了解此应用程序的性质很重要. 有两种类型的计算机应用程序 – 那些需要用户输入,因此在前台运行,另一种在后台运行. Nginx是后一种类 ...
- Qt5.7 + VS2015 环境搭建
http://blog.csdn.net/liang19890820/article/details/53931813#安装插件 配置 Qt 5.7 选择:Qt VS Tools -> Qt O ...
- 使用pycharm调用模块后字体变灰
点击小灯泡提示出现以下内容:This inspection detects names that should resolve but don't. Due to dynamic dispatch a ...
- VsCode语言设置为中文
一.安装插件 二.Ctrl+shift+p 搜索Configure Display Language 三.修改locale.json { // Defines VS Code's display la ...
- 最短路径算法dijkstra的matlab实现
function Dijkstra(Graph, source): 2 3 create vertex set Q 4 5 for each vertex v in Graph: ...
- 基于SaaS的企业数据隐私保护平台
导读 WireWheel成立于2016年,总部位于华盛顿,该公司致力于降低数据隐私保护合规能力建设的难度,帮助企业来应对复杂.严厉的法案.条例规定.2018年10月,公司获得了PSP Growth领投 ...
- Photoshop 基础七 位图 矢量图 栅格化
矢量图(CorelDraw)不是像素组成的,放大不会失真,体积小,颜色比较单一.由直线.曲线构成,画一些直线.曲线.多边形.图标. 位图(Photoshop画的就是位图),又像素组成,放大失真,放的越 ...
- FreeRTOS学习笔记--任务优先级
FreeRTOSConfig.h 中的常量configMAX_PRIORITIES的值就是任务优先级的最大数值,这个数值可以按照自己的需要改动,当然值越大,内核对内存的开销就越大,一般设置一个满足自己 ...
- Python threading中lock的使用
版权声明: https://blog.csdn.net/u012067766/article/details/79733801在多线程中使用lock可以让多个线程在共享资源的时候不会“乱”,例如,创建 ...
- WIFI底座
自己贴片的51+WIFI的开发板终于到了..还是贴片的好看 美中不足的是需要改一个电阻的阻值..还有就是由于自己的8266和51单片机一块断电上电,所以如果用的USB线的质量不好就会出现 下载不了程序 ...