linux elf文件装载
来源:互联网 发布:传送门骑士 知乎 编辑:程序博客网 时间:2024/05/21 18:36
(看这篇文章之前最好先理解一下ELF文件结构)
http://www.cbismb.com/articlehtml/20178119.htm
首先再用户层面(这里就当是进入超级终端吧,更好理解),(当执行文件时)bash进程会调用fork函数创建一个新的进程,然后新的进程调用execve系统调用执行指定的elf文件,原先bash进程继续返回等待刚才启动的新进程结束。然后等待用户输入命令。
int execve(const char *filename,char *const argv[],char *const envp[]);
分别是被执行的程序文件名,执行参数和环境变量。
glibc对execvp进行了包装,提供了execl(),execlp(),execle(),execvp()等不同形式的api。但是最总都会调用execve().
1、进入系统调用后,linux内核看是真正的装载工作。在内核中,系统调用相应的入口是sys_execve().被定义在arch/i386/kernel/process.c.
2、进行一些参数的检查赋值以后就调用do_execve()。首先检查被执行的文件,找到文件就读取128个字节。来判断文件的格式(有./a.out elf 脚本等)。就是比对魔数。
3、do_execve() 调用search_binary_handle()搜索和匹配合适的可执行文件装载处理过程。比如elf的函数是load_elf_binary().
load_elf_binary()定义再fs/Binfmt_elf.c:
a、检查ELF可执行文件的有效性,比如魔数,段的数量
b、寻找.interp段,设置动态连接器的路径
c、根据elf可执行文件的程序头表的描述,对elf文件进行映射。
d、初始化elf进程环境,比如启动时候EDX的地址是DT_FINI的地址。
f、将系统调用的返回地址修改为elf可执行文件的入口点,这个入口点取决于程序的链接方式,对于静态链接的elf可执行文件,就是e_entry所存的地址。对于动态链接的elf可执行文件就是动态连接器
4、执行完毕后,lcad_elf_binary(),返回到do_execve()再返回到sys_execve()。
5、sys_execve()从内核态返回到用户态,同时返回第五步已经更改的程序入口地址。eip存储器直接跳转到elf程序的入口地址,新进程执行。
- linux elf文件装载
- 链接、装载与库:Linux下的ELF文件
- 装载器-ELF文件分析【1】
- 【linux内核装载elf过程简介】
- linux内核装载elf过程简介
- Linux下ELF可执行文件装载与运行
- linux elf文件构造
- linux ELF文件学习
- Linux ELF文件学习
- Linux ELF文件学习
- Linux ELF文件
- ELF文件装载链接过程及hook原理
- 链接、装载与库:ELF文件解析实践
- ELF文件装载链接过程及hook原理
- Linux内核中ELF可执行文件的装载/l…
- Linux计算机进程地址空间与内核装载ELF
- 浅析Linux计算机进程地址空间与内核装载ELF
- ELF Linker学习篇(一)关于ELF文件装载进内存
- 神州侠侣 1994年看过的一部电视剧 满喜欢的
- mouse
- 江城子.春末感怀之二
- LINUX下(虚拟机中的LINUX系统)串口通讯 part3------fedora 9下USB转串口的应用和minicom的设置(转载)
- 谈一谈网络编程学习经验(06-08更新)
- linux elf文件装载
- ASP.NET authentication and authorization
- 教你摆脱人人桌面renrenservice.exe启动的困扰
- 现代智能优化算法
- Unit Test中Logback 性能测试及优化
- [看文献]deer mouse 血红蛋白高海拔适应
- c++:stringstream
- 转:移植tslib到开发板及部分问题解决
- ATM 取款机