当前位置: 首页 > news >正文

linux进程加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢?

首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后的每一个程序,每一个应用,都是不断的 fork 出来的新进程。那么我们的可执行文件,以linux 系统为例,也是由shell 进程 fork 出一个新进程,在新进程中调用exec函数装载我们的可执行文件并执行。

可执行文件格式ELF

可执行文件需要被内核运行,自然需要遵守一定的规范。

Linux下标准的可执行文件格式是ELF。ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 UNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。

但是linux也支持其他不同的可执行程序格式, 各个可执行程序的执行方式不尽相同, 因此linux内核每种被注册的可执行程序格式都用linux_bin_fmt来存储, 其中记录了可执行程序的加载和执行函数。

在这里插入图片描述

  • st

相关文章:

  • 解决git status提示error bad signature 0x00000000
  • 步进电机和伺服电机哪个好_步进电机和伺服电机的区别
  • 一文了解知识中台:是什么、作用、如何搭建
  • 探索UWB模块的多功能应用——UWB技术赋能智慧生活
  • C语言习题~day27
  • LINUX系统编程:信号量
  • 最新扣子(Coze)使用指南更新:如何导入扣子插件,完全免费Coze教程
  • JavaScript函数进阶学习
  • 0基础认识C语言(理论知识)
  • 算法课程笔记——计数原理
  • 直流电机工作原理与控制电路解析
  • 汇编原理(三)编程
  • Android bw_costly_<iface>链
  • TypeScript算法每日一题:两数之和(1)
  • 计算机网络介绍
  • #Java异常处理
  • 230. Kth Smallest Element in a BST
  • Android 控件背景颜色处理
  • AngularJS指令开发(1)——参数详解
  • bootstrap创建登录注册页面
  • fetch 从初识到应用
  • Fundebug计费标准解释:事件数是如何定义的?
  • happypack两次报错的问题
  • isset在php5.6-和php7.0+的一些差异
  • JAVA SE 6 GC调优笔记
  • JS+CSS实现数字滚动
  • Laravel 实践之路: 数据库迁移与数据填充
  • Linux后台研发超实用命令总结
  • 闭包--闭包作用之保存(一)
  • 服务器之间,相同帐号,实现免密钥登录
  • 近期前端发展计划
  • 聊一聊前端的监控
  • 微信小程序开发问题汇总
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • # linux 中使用 visudo 命令,怎么保存退出?
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (SpringBoot)第二章:Spring创建和使用
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)可以带来幸福的一本书
  • .bashrc在哪里,alias妙用
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 命令行参数包含应用程序路径吗?
  • .net 验证控件和javaScript的冲突问题
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [100天算法】-x 的平方根(day 61)
  • [15] 使用Opencv_CUDA 模块实现基本计算机视觉程序
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [22]. 括号生成
  • [AIGC] CompletableFuture的重要方法有哪些?
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BetterExplained]书写是为了更好的思考(转载)
  • [BT]BUUCTF刷题第4天(3.22)
  • [C++]类和对象【上篇】