首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux装载启动可执行程序过程

罗军 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 基础知识 编译程序过程 预处理...用IDA打开静态链接hello文件: ? 可以看到已经把puts函数内容导入到代码段了。 装载启动过程分析 execve函数调用流程如下: ?...//装载ld起点 #获得动态连接器程序起点 elf_entry = load_elf_interp(&loc->interp_elf_ex, interpreter...set_thread_flag(TIF_NOTIFY_RESUME); } 设置新eip和esp,即加载可执行程序启动地方,我们打印...查看hello程序入口地址: ? 可以验证两者地址是一样,说明静态链接hello程序从这里开始运行。 参考博客:ELF文件加载和动态链接过程

3K40

程序装载方式

使用页映射动态装载方式,可以让程序正确地运行。...假设程序入口地址在 P0,装载管理器发现程序 P0 不在内存中,于是将内存 F0 分配给 P0,并且将 P0 内容装入 F0,运行一段时间后,程序需要使用 P5、P3 和 P6,那么分别将 P5、...如果程序只需要 P0、P5、P3 和 P6,那么程序可以一直运行下去,但是如果程序后面的执行还需要其他页,此时装载管理器必须淘汰一页腾出空间载入下一页。...目前主流操作系统都是按照页映射方式完成程序装载,比如 Windows 对 PE 文件装载Linux 对 ELF 文件装载,均采用这种方式。...参考文献 [1] 俞甲子,石凡,等.程序自我修养——链接、装载与库[M].北京:电子工业出版社,2009-04.C6.2装载方式.P153-157

79430
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    程序编译、链接、装载与运行

    程序编译、链接、装载与运行 2018-11-23 在Linux操作系统中,一段C程序从被写下到最终被CPU执行,要经过一段漫长而又复杂过程。下图展示了这个过程 ?...目录 编译 目标文件格式 链接 装载 运行 1. 编译 编译就是把程序员所写高级语言代码转化为对应目标文件过程。一般来说高级语言编译要经过预处理、编译和汇编这几个过程。...装载 在上一节我们已经通过链接得到了可执行文件,在可执行文件中包含了很多段(section),但是一旦这些段被加载到内存中之后,我们就不在乎他到底是什么类型数据,而只在乎这份数据在内存中读写权限。...栈本身是一个容器,它特性是FILO。通过上面的Linux内存分布图我们可以知道,内存中栈是向下增长。...x86 CPU提供了4个特权级,Linux用到了其中两个特权级,在Linux中分别叫内核态和用户态,内核态特权级比用户态高。

    1.3K10

    Linux启动引导程序(GRUB)加载内核过程

    本节,我们就来看看启动引导程序加载内核过程,当然 initramfs 这个虚拟文件系统也是要靠启动引导程序调用。...在 CentOS 6.x 中,启动引导程序默认是 GRUB,GRUB 是现在最为流行启动引导程序,我们也用 GRUB 来说明启动引导程序作用。...GRUB加载内核过程GRUB 作用有以下几个:加载操作系统内核;拥有一个可以让用户选择菜单,来选择到底启动哪个系统;可以调用其他启动引导程序,来实现多系统引导。...答案是空间不够,GRUB 功能非常强大,MBRM 空间是不够使用。那么 Linux 解决办法是把 GRUB 程序分成了三个阶段来执行。...Stage 1:执行GRUB主程序第一阶段是用来执行 GRUB 主程序,这个主程序必须放在启动区中(也就是 MBR 或者引导扇区中)。

    40320

    研读《程序自我修养—链接、装载与库》

    前言 《编译与链接过程思考》 《静态库与动态库思考》 在写完上面两篇思考之后,仔细研读《程序自我修养—链接、装载与库》,对编译、链接、装载、静态库和动态库有连贯认知。...正文 机器指令 最初机器指令,是使用纸带来记录; 当变更指令时候,需要程序员重新计算每个子程序跳转地址。这个操作就是重定位。 但是,如果有多条纸带,跳转更为复杂。...目标文件:编译器编译源代码后产生文件,没有经过链接过程,某些符号还没有调整过,Windows下.obj文件,Linux.o文件,Unix.out文件。...动态链接涉及到运行时链接以及文件装载,故而需要操作系统支持。 程序与.so文件之间链接是由动态链接库完成,静态链接是由静态链接器ld完成。...结果思考 Xcode工程link设置上动态库,会在程序启动时加载到内存,即使你没有用到这个库函数;(测试代码中没有用到BLib动态库代码,但是启动即加载了BLib) dispatch_after

    1.6K70

    重学计算机组成原理(八)- 程序装载

    1 程序装载挑战 在运行这些可执行文件时候,我们其实是通过一个装载器,解析ELF或者PE格式可执行文件 装载器会把对应指令和数据加载到内存里面来,让CPU去执行。...装载到内存,装载器需要满足两个要求 可执行程序加载后占用内存空间应该是连续 执行指令时候,程序计数器是顺序地一条一条指令执行。...Fragmentation) 举个例子 电脑有1GB内存 先启动一个图形渲染程序,占用了512MB内存 接着启动一个Chrome浏览器,占用了128MB内存 再启动一个PY程序,占用了256MB...如果你自己安装过Linux操作系统,你应该遇到过分配一个swap硬盘分区问题 这块分出来磁盘空间,其实就是专门给Linux操作系统进行内存交换用。...在Linux下,我们通常只设置成4KB。你可以通过命令看看你手头Linux系统设置大小。

    47811

    linux命令mysql启动,linux启动mysql命令

    linux启动mysql命令 一、总结一下: 1.linux启动mysql命令: mysqladmin start /ect/init.d/mysql start (前面为mysql安装路径)...2.linux下重启mysql命令: mysqladmin restart /ect/init.d/mysql restart (前面为mysql安装路径) 3.linux下关闭mysql命令:...这样才有机会自己填充Command Code,Identi …… 摘要 我们在这里讨论是对嵌入式linux系统启动过程输出信息注释,通过我们讨论,大家会对嵌入式linux启动过程中出现、以前感觉熟悉...嵌入式linux启动信息是一个很值得我们去好好研究东西,它能将一幅缩影图呈现在我� …… Linux内核源码分析-链表代码分析 分析人:余旭 分析时间:2005年11月17日星期四 11:40:10...本文用作其他用 …… 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143551.html原文链接:https://javaforall.cn

    20.6K10

    Linux 启动流程

    那篇文章不涉及操作系统,只与主板板载程序有关。今天,分享一篇Linux系统启动文,主要探讨操作系统接管硬件以后发生事情,也就是操作系统启动流程。 ? 这个部分比较有意思。...它们在Windows叫做"服务"(service),在Linux就叫做守护进程(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做运行级别(runlevel)。...也就是说,启动时根据运行级别,确定要运行哪些程序 ? Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。...Linux解决办法,就是七个 /etc/rcN.d 目录里列出程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正启动脚本都统一放在这个目录中。

    2K30

    linux根据进程号PID查找启动程序全路径

    工作环境中遇到网络不正常,检测是某服务器异常往外发送数据包,使用netstat命令查看,发现有程序.IptabLex这个进程状态为异常连接.无法有效清除,因此想知道是哪个目录程序处于僵死状态....出问题时进程状态为: [root@edu-web1 /] ps x ?...找到某进程启动路径方法是: 1.我们可以从ps命令中得到僵死进程PID,如上例中23347 2.进入/proc目录下以该PID命名目录中 3.输入ls -ail,结果中 exe链接对应就是可执行文件全路经详细信息...可以发现此连接有异常,对应应用也有问题,剩下就是想办法删除此僵尸进程对应应用程序了,一般都是冗余或垃圾程序,可rm -f 干掉…… 总结 以上所述是小编给大家介绍linux根据进程号PID查找启动程序全路径...,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

    9.6K31

    Linux 启动流程

    它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程一大任务,就是去运行这些开机启动程序。...但是,不同场合需要启动不同程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。Linux允许为不同场合,分配不同开机启动程序,这就叫做"运行级别"(runlevel)。...也就是说,启动时根据"运行级别",确定要运行哪些程序。 ? Linux预置七种运行级别(0-6)。一般来说,0是关机,1是单用户模式(也就是维护模式),6是重启。...第四步、加载开机启动程序 前面提到,七种预设"运行级别"各自有一个目录,存放需要开机启动程序。...Linux解决办法,就是七个 /etc/rcN.d 目录里列出程序,都设为链接文件,指向另外一个目录 /etc/init.d ,真正启动脚本都统一放在这个目录中。

    3.3K50

    Linux 启动流程

    本篇重点是讲解设备和驱动启动流程,设备和驱动流程是整个内核启动核心,也是工作中最常面对问题。出于知识点系统性考虑,在进入主题之前我们先看下整个 Linux 在 ARM 中启动流程如何。...Uboot 启动流程 ARM Linux 启动流程大致为:Uboot → Kernel → Root filesystem。Uboot 在上电时候就拿到 CPU 控制权,实现了硬件初始化。...检测处理器类型 Uboot 在调用内核前需要检测系统处理器类型,并将其保存在某个变量中提供给内核,内核在启动过程中会根据该处理器类型调用相应初始化程序。...Linux 内核启动流程(设备和驱动加载) 关于 Uboot 启动本课程不做详细介绍,因为本课程主要内容是内核。在讲述内核启动之前让我们先了解下内核组成结构: ?...经过上面的分析不难知道 piggy.o 就是内核镜像,而剩下几个文件就组成了引导程序。知道了内核组成结构,Uboot 就是按照内核组成结构一层一层剥开然后引导内核: ?

    2.7K42

    干货:Linux启动Java程序jar包Shell脚本

    每次启动Java程序jar包时候,难道你还在手敲java -jar xxserver.jar……?边敲边想着都需要追加哪些参数?...今天就推荐给大家一个几乎通用Shell脚本,它支持Java程序Jar包服务启动、服务停止、服务状态查看,同时在脚本中追加了一些语法说明,具体Shell命令,还请大家自行上网学习。 #!.../bin/sh # 该脚本为Linux启动java程序脚本 # # author: luandy # date: 2021/1/15 # # 特别注意: # 该脚本使用系统kill命令来强制终止指定...java程序进程。...如果必须要考虑到这类情况,则需要改写此脚本, # # # 根据实际情况来修改以下配置信息 ################################## # JAVA应用程序名称 APP_NAME

    5.1K10

    Linux通用java程序启动脚本代码实例

    /bin/sh #该脚本为Linux启动java程序通用脚本。即可以作为开机自启动service脚本被调用, #也可以作为启动java程序独立脚本来使用。...############## #JDK所在路径 JAVA_HOME="/usr/java/jdk" #执行程序启动所使用系统用户,考虑到安全,推荐不使用root帐号 RUNNING_USER=root...#Java程序所在目录(classes上一级目录) APP_HOME=/opt/tudaxia/test/WEB-INF #需要启动Java主程序(main方法类) APP_MAINCLASS=...如果程序已经启动($psid不等于0),则提示程序启动 #3. 如果程序没有被启动,则执行启动命令行 #4. 启动命令执行后,再次调用checkpid函数 #5....为了防止java程序启动多次,这里增加反复检查进程,反复杀死处理(递归调用stop)。 #注意:echo -n 表示打印字符后,不换行 #注意: 在shell编程中,"$?"

    2.2K20

    推荐:Linux启动Java程序jar包Shell脚本

    每次启动Java程序jar包时候,难道你还在手敲java -jar xxserver.jar……?边敲边想着都需要追加哪些参数?...今天就推荐给大家一个几乎通用Shell脚本,它支持Java程序Jar包服务启动、服务停止、服务状态查看,同时在脚本中追加了一些语法说明,具体Shell命令,还请大家自行上网学习。 #!.../bin/sh # 该脚本为Linux启动java程序脚本 # # author: luandy # date: 2021/1/15 # # 特别注意: # 该脚本使用系统kill命令来强制终止指定...java程序进程。...如果必须要考虑到这类情况,则需要改写此脚本, # # # 根据实际情况来修改以下配置信息 ################################## # JAVA应用程序名称 APP_NAME

    7K20

    如何改善应用程序Linux启动时间

    大多数 Linux 发行版在默认配置下已经足够快了。但是,我们仍然可以借助一些额外应用程序和方法让它们启动更快一点。其中一个可用这种应用程序就是 Preload。...简而言之,一旦安装了 Preload,你使用较为频繁应用程序将可能加载更快。 在这篇详细教程中,我们将去了解如何安装和使用 Preload,以改善应用程序Linux启动时间。...在 Linux 中使用 Preload 改善应用程序启动时间 Preload 可以在 AUR 上找到。...因此,你可以使用 AUR 助理程序在任何基于 Arch 系统上去安装它,比如,Antergos、Manjaro Linux。...因为 SSD 访问时间比起一般硬盘来要快多,因此,使用 Preload 是没有意义。 Preload 显著影响启动时间。因为更多应用程序要被预读到内存中,这将让你系统启动运行时间更长。

    3.8K10

    linux命令mysql启动,在linux启动mysql服务命令

    大家好,又见面了,我是你们朋友全栈君。 用reboot命令重启linux服务器之后会导致mysql服务终止,也就是mysql服务没有启动。...在图形界面下启动mysql服务步骤如下: (1)打开控制面板->管理工具->服务,如下图所示: 可以看到Mysql服务目前状态是未启动(未写已启动linux启动tomcat服务命令是什么...Linux下tomcat服务启动.关闭与错误跟踪,使用PuTTy远程连接到服务器以后,通常通过以下几种方式启动关闭tomcat服务:切换到tomcat主目录下bin目录(cd usr/local/...点击 任务管理器右下角服务 在这里就可以正常启动服务 linux启动mysql服务(类似于windows下net start mysql) 1.linux系统启动方式:service mysql start...Linux环境下将MySQL服务添加到服务器系统服务中 1.了解MySQL程序路径 MySQL数据目录: /home/mysql/dataMyS … 命令行启动mysql服务 在课程中曾学过net命令

    20K30
    领券