20135316王剑桥Linux内核学习记笔记第七周
20135316王剑桥《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC 1000029000
一、可执行程序是怎么得来的?
编译器预处理(负责把include的文件包含进来及宏替换等工作);编译成汇编代码;编译器编译成目标代码;再链接成可执行文件;操作系统加载到内存中来执行
hello.o和hello文件都是ELF格式的
二、目标文件的格式(ELF可执行可链接)
ABI(应用程序二进制接口)
可重定位主要是.o文件
可执行文件加载的主要工作:可执行文件的格式和进程地址空间的映射。
三、ELF文件默认加载到0x8048000;程序的实际入口是头文件里面的那个地址位置0x8048x00(可执行文件加载到内存中执行的第一句代码);一般静态链接会将所有代码放在一个代码段,动态链接会有多个代码段。
四、可执行程序的执行环境
$ ls -l /usr/bin 列出/usr/bin下的目录信息
Shell本身不限制命令行参数的个数,命令行参数的个数受限于命令自身
例如,int main(int argc, char argv[])
又如, int main(int argc, char argv[], char envp[])
Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数
int execve(const char filename,char * const argv[ ],char * const envp[ ]);
命令行参数和环境串都放在用户态堆栈中,先函数调用参数传递,再系统调用参数传递。
五、动态链接分为可执行程序装载是动态链接和运行时动态链接
gcc -shared shlibexample.c -o libshlibexample.so -m32
-L:库对应的接口头文件所在的目录
-l:库名
-ldl:动态加载器
六、子进程是从ret-from-fork开始执行然后返回用户态。
七、当系统调用进入内核中后调用sye-execve,解析可执行文件的格式。之后的调用顺序为:do-execve、do-execve-commom、exex-binprm。Search-binary-handle寻找符合文件格式对应的解析模块(根据文件头部信息)。
八、对于ELF格式的可执行文件fmt->load-binary(bprm),执行的应该是load-elf-binary,其内部是和ELF文件格式解析的部分需要和ELF文件格式标准结合起来阅读。
九、Elf-format和inint-elf-binfmt是观察者模式中的观察者,解析模块是被观察者
十、Load-elf-binary->start-thread,系统调用返回用户态的起点,通过修改内核堆栈中EIP的值作为新程序的起点(int 0x80)。命令行参数和环境变量在栈顶。
十一、如果可执行文件需要依赖其他的动态链接的话,需要将CPU控制权交给ld来加载依赖库完成动态链接。对于静态链接的文件elf-entry是新程序执行的起点
s可以进入do-execve的内部
Po new-ip可以查看返回到用户态的第一条指令地址
20135316王剑桥Linux内核学习记笔记第七周的更多相关文章
- 20135316王剑桥Linux内核学习笔记
王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理 ...
- 20135316王剑桥Linux内核学习笔记第四周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 1.内核态:在高执行级别,代码可 ...
- 20135316王剑桥Linux内核学习笔记第三周
20135316王剑桥 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 三个法宝:存储程序计算机.函数调 ...
- 《Linux内核与分析》第七周
by 21035130王川东 Linux内核如何装载和启动一个可执行程序 一. EIF文件格式: 1.ELF头部在文件的开始,描述文件的总体格式,保存了路线图,描述该文件的组织情况,即生成该文件系统的 ...
- 《Linux内核分析》课程第七周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- 20135316王剑桥 linux第四周课实验笔记
第三章 程序的机器级表示 3.1历史观点 Intel处理器的换代:8086——80286——i386——i486——Pentium——PentiumPro——PentiumII——PentiumIII ...
- 20135316王剑桥 linux第十周课实验笔记
关于who 功能说明:显示目前登入系统的用户信息. 语 法:who [-Himqsw][--help][--version][am i][记录文件] 补充说明:执行这项指令可得知目前有那些用户登入系统 ...
- 20135316王剑桥 linux第二周课实验笔记
Linux中命令格式为: command [options选项] [arguments参数] //中括号代表是可选的,即有些命令不需要选项也不需要参数 ls或ls .显示是当前目录的内容,这里“.”就 ...
- 20135316王剑桥 linux第五周课实验笔记
4.1.1程序员的可见的状态 ———— Y86的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态.如图1所示. 1.程序寄存器(Program registers): %eax, %ec ...
随机推荐
- 4.92Python数据类型之(7)字典
目录 目录 前言 (一)字典的基本知识 ==1.字典的基本格式== (二)字典的操作 ==1.字典元素的增加== ==2.字典值的查找== ==3.字典的修改== ==4.字典的删除== ==5.字典 ...
- B - Modular Inverse
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x ...
- SQL的各种连接Join详解
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL ...
- oracle 查询 磁盘使用率
SELECT d.tablespace_name "Name", TO_CHAR(NVL(a.bytes / 1024 / 1024 / 1024, 0), '99, ...
- centos7 rpm 安装mysql
1.wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-1.el7.x86_64.rpm-bundle.tar 2.tar ...
- 轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接
轻量级JAVA+EE企业应用实战(第4版)pdf电子书和源码的免费下载链接: pdf链接:https://pan.baidu.com/s/1dYIWtsv2haL4v7vx3w-8WQ 无提取密码源码 ...
- PAT A1021 Deepest Root (25 分)——图的BFS,DFS
A graph which is connected and acyclic can be considered a tree. The hight of the tree depends on th ...
- POJ2253(dijkstra堆优化)
https://vjudge.net/problem/POJ-2253 Freddy Frog is sitting on a stone in the middle of a lake. Sudde ...
- node中npm安装模块的网络问题
最近使用node开发时,发现所有的依赖模块都安装不了啦,一直报错如下 rollbackFailedOptional: verb npm-session 5a4a66a1b8d06dc3 后来才发现是由 ...
- <转>大型分布式网站术语浅析
夜半睡起看书,看到一篇关于分布式网站性能优化术语的文章,个人觉得不错,分享出来... 原文地址:大型分布式网站术语分析 一.I/O优化 1.增加缓存,减少磁盘的访问次数. 2.优化磁盘的管理系统,设计 ...