可执行程序的装载


作者 黎静+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

可执行程序是怎么来的

目标文件的格式ELF

静态链接的ELF可执行文件和进程的地址空间

  • 程序的入口 :Entry point address:0x8048300

  • 一般静态链接会将所有代码放在一个代码段

  • 动态链接的进程会有多个代码段

装载可执行程序之前的工作

  • 可执行程序的执行环境

shell命令行、main函数的参数与execve的参数 Shell会调用execve将命令行参数和环境参数传递给可执行程序的main函数,先函数调用参数传递,再系统调用参数传递。

  • execve和fork都是特殊一点的系统调用:一般的都是陷入到内核态再返回到用户态。 fork父进程和一般进程调度一样,子进程返回到一个特定的点retfromfork,子进程是从retfromfork开始执行然后返回到用户态;

  • 一般是地址空间为0x8048000或0x8048300;

  • execve特殊:执行到可执行程序--陷入内核--构造新的可执行文件--覆盖掉原可执行程序--返回到新的可执行程序,作为起点(也就是main函数) ,需要构造他的执行环境;

  • 静态链接:elfentry指向可执行文件的头部,一般是main函数;2. 动态链接:elfentry指向ld的起点

可执行程序测装载

浅析动态链接的可执行程序的装载

(1)可以关注ELF格式中的interp和dynamic。

(2)动态链接库的装载过程是一个图的遍历。

(3)装载和连接之后ld将CPU的控制权交给可执行程序。

转载于:https://www.cnblogs.com/heiguirenxi/p/5366146.html

第七周linux内核分析相关推荐

  1. Linux内核分析期末总结

    <Linux内核分析>期末总结 20135313吴子怡.北京电子科技学院 Chapter1 往期博客传送门 (1)计算机是如何工作的:Linux内核分析--第一周学习笔记 (2)操作系统是 ...

  2. Linux内核分析 第七周 可执行程序的装载

    张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 Linux内核分析 第七 ...

  3. LINUX内核分析第二周学习总结——操作系统是如何工作的

    LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  4. 20135320赵瀚青LINUX内核分析第一周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...

  5. 《Linux内核分析》 第三周 构造一个简单的Linux系统MenuOS

    Linux内核分析 第三周 构造一个简单的Linux系统MenuOS 张嘉琪 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  6. Linux内核分析作业第二周

    操作系统是如何工作的 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 1.计算机工作三 ...

  7. 《Linux内核分析》第一周笔记 计算机是如何工作的

    一.计算机是如何工作的? 1.存储程序计算机工作模型 1)冯诺依曼体系结构 学习研究计算机的基本概念.就是指存储程序计算机.所有的有计算功能的电子设备小到计算器,大到超级计算机核心部分都可以用这种体系 ...

  8. Linux内核分析第一周——计算机是如何工作的

    冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...

  9. Linux内核分析第二周:操作系统是如何工作的

    第一讲 函数调用堆栈 计算机是如何工作的? (总结)--三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...

最新文章

  1. 微服务限流Sentinel讲解(四)
  2. Andrew Ng机器学习课程6
  3. 【白话机器学习】算法理论+实战之AdaBoost算法
  4. Exception processing async thread queue
  5. mpvue v-html解决方案,mpvue开发小程序所遇问题及h5转化方案
  6. TCP第四次挥手为什么要等待2MSL
  7. 栈和队列的区别,栈和堆的区别
  8. 幼儿园 c语言,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据
  9. B-数,B+树,B*树简单定义
  10. [渝粤教育] 江西理工大学 新融合大学英语(I) 参考 资料
  11. 男孩应该懂的,女孩应该懂的
  12. 华为5大设计师讲述HarmonyOS UX设计背后的故事
  13. 关于海康威视网络摄像机二次开发问题
  14. java thrift使用指南_Thrift使用指南
  15. 何为Servlet?
  16. 人工智能计算机技术图片,这是人工智能眼中它自己的样子
  17. [论文阅读-NeRF+SLAM] iMAP:首个隐式场景表征的实时SLAM
  18. 微信小程序 虚拟现实_开发虚拟现实应用程序的重要性
  19. 远程linux云主机,Linux实验室 远程连接Linux云主机方法
  20. QCA wlan driver load

热门文章

  1. 利用android studio 生成 JNI需要的动态库so文件
  2. edge浏览器设置默认浏览器
  3. kaggle數據集下載到colab上并且解压
  4. yelee主题安装gitalk(转载+整理)
  5. C++语法细节注意集锦
  6. 【机器学习】集成学习知识点总结二
  7. 反向代理post参数怎么传输_面试必备:GET和POST的区别详细解说
  8. 平方环法_2019环法挑战赛加速诸暨“运动之城”建设 推动“体育+旅游”新热潮...
  9. 开源大数据周刊-第102期
  10. 为什么Python是最吸金编程语言?