
a 执行对命令行参数和环境参数空间页面的初始化 *** 作------设置初试空间起始指针,初试空间页面指针数组为NULL,根据执行文件名取执行对象的i节点,计算参数个数和环境变量个数,检查文件类型,执行权限。
b 根据执行文件开始部分的头数据结构,对其中信息进行处理------根据被执行文件i节点读取文件头部信息(二进制可执行文件和shell脚本文件都是作为普通文件进行读取);若是shell脚本程序(第一行以“#!”开始),则分析shell程序名及其参数,并以被执行文件作为参数执行指定的shell程序(这也就解释了为什么shell脚本都要以“#!”放在文件第一行开头)。
c 对当前调用进程在运行新程序前进行初始化 *** 作------指向新执行文件的i节点,复位信号处理句柄,根据头结构信息设置局部描述符基址和段长。设置参数和环境参数页面指针,修改进程各执行字段内容。
d 替换堆栈中原调用execve()程序的返回地址为新执行程序运行地址,运行新加载程序(这个新执行程序运行的起始地址在这个执行文件头部数据结构中)。
在linux文件系统中,是以块为单位存储信息的,为了找到某一个文件在存储空间中存放的位置,用i节点对一个文件进行索引。I节点包含了描述一个文件所必须的全部信息。所以i节点是文件系统管理的一个数据结构。希赛有很多这种资料的
以上就是关于如何加载并执行一个二进制可执行文全部的内容,包括:如何加载并执行一个二进制可执行文、i节点在Linux文件系统中的作用、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)