《Linux内核分析》

第七章 可执行程序工作原理

7.1 知识点

1、目标文件:编译器生成的文件,“目标”指平台,它决定了编译器使用的机器指令集。

2、目标文件格式:a.out(最古老的)→COFE →PE(Windows)→ELF(Linux)

3、ELF: Executable and Linkable Format,可执行的和可链接的格式,是一个目标文件格式的标准。此格式的文件用于存储Linux程序。

4、ELF文件的3种类型:

  • 可重定位文件(中间文件)
  • 可执行文件(一般由多个可重定位文件结合生成)
  • 共享目标文件(共享库,Linux下共享库后缀为.so的文件)

    5、ELF文件的作用:
  • 用于编译和连接(可重定位文件)
  • 用于加载执行(可执行文件)
  • 共享文件两者都有

    6、一个可重定位文件保存着代码和适当的数据,用来和其他的object文件一起来创建一个可执行文件或者是一个共享文件。一个可执行文件保存着一个用来执行的程序;该文件指出了exec(BA_OS)如何来创建程序进程映象。一个共享object文件保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是连接编辑器[请参看ld(SD_CMD)],可以和其他的可重定位和共享object文件来创建其他的object。第二个是动态链接器,联合一个可执行文件和其他的共享object文件来创建一个进程映象。

7、ELF头描述了该文件的组织情况,程序投标告诉系统如何创建一个进程的内存映像,section头表包含了描述文件sections的信息。当系统要执行一个文件的时候,理论上讲,他会把程序段拷贝到虚拟内存中某个段。

8、程序从0x804800开始,可执行文件加载到内存中开始执行的第一行代码,一般静态链接将会把所有代码放在同一个代码段,动态连接的进程会有多个代码段。

9、程序编译

  • ①编译器预处理

    gcc -E -o XX.cpp XX.c (-m32)//

    注:把include的文件包含进来,并且完成宏的替换
  • ②汇编器编译成汇编代码

    gcc -x cpp-output -S -o hello.s hello.cpp (-m32)
  • ③汇编代码编译成二进制目标文件

    gcc -x assembler -c hello.s -o hello.o (-m32)

    注:不可读,含有部分机器代码但不可执行
  • ④链接成可执行文件

    gcc -o hello.static hello.c (-m32) -static
  • ⑤hello和hello.o都是ELF文件
  • ⑥.static文件会将所有用到C库文件都放到这一个可执行程序中

7.2 实验过程

  • 实验内容:Linux内核如何装载和启动一个可执行程
  • 更新menu内核

  • 查看test.c文件,可以看到新增加了exec系统调用



  • 启动内核并验证execv函数



  • 冻结内核,启动GDB调试



  • 先停在sys_execve处,再设置其它断点;按c一路运行下去直到断点sys_execve





  • 退出调试状态,输入readelf -h hello可以查看hello的EIF头部

*struct pt_regs regs就是内核堆栈栈底的部分,发生中断的时候,esp和ip都进行压栈。通过修改内核堆栈中EIP的值(也就是把压入栈中的值用new_ip替换)作为新程序的起点。

最新文章

  1. 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
  2. nginx(3、负载均衡)
  3. [Asp.net 5] Configuration-新一代的配置文件(接口定义与基础实现)
  4. DAY3 python群发短信
  5. oracle 数据库时间类型为字符串 时间范围大小查询
  6. c++实现排序(简单插入,希尔,选择,快速,冒泡,堆排)
  7. LA 2797 (平面直线图PLSG) Monster Trap
  8. OWIN OAuth 2.0 Authorization Server
  9. 反引号backtick中输入多个命令
  10. 20160218.CCPP体系详解(0028天)
  11. centos7下kubernetes(13。kubernetes-探讨service IP)
  12. php之swoole安装与基本使用
  13. 23. 合并K个排序链表
  14. windows(64位)下使用curl安装
  15. 第三篇 功能实现(2) (Android学习笔记)
  16. C#把汉字转换成16进制(HEX)并向串口发送数据
  17. HTML5练习4
  18. 卡巴斯基KAV2013 – 免费一年 (六一活动)
  19. Python3 小工具-僵尸扫描
  20. Wpf ScrollBar自定义样式

热门文章

  1. Java数据类型与mysql对应表
  2. 403 Invalid CORS request 跨域问题
  3. NKOJ 1353 图形面积
  4. Java并发基础02. 传统线程技术中的定时器技术
  5. JQ前端上传图片显示在页面以及发送到后端服务器
  6. css布局之盒模型
  7. C语言 文件操作(八)
  8. Linux 用户管理篇(一)
  9. 3.K均值算法
  10. Array(数组)对象-->数组遍历