linux下的excel函数调用函数调用,逐层分析fork()函数与exec()函数

本文详细介绍了Linux环境下,如何使用fork()函数创建子进程以及exec()函数加载可执行程序。通过示例程序演示了fork()与execl()的配合使用,展示了ELF文件格式,深入解析了fork()的执行过程和execl()的加载步骤,以及动态链接执行程序的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

姓名:倪群

学号:SA12226209

班级:嵌入式一班

实验题目:进程的创建与可执行程序的加载

实验环境:ubuntu12.04

gcc编译工具链 Geany

实验内容:

fork()和exec()函数(这里代指exec函数族)的作用分别是为当前父进程生成一个子进程以及在执行一个新进程以替换当前进程执行内容和上下文环境。

其中fork()函数会通过创建一系列子进程需要的数据结构(包括task_struct),并根据参数设置,初始化各个数据结构的内容,函数返回时,子进程返回0,父进程返回子进程的PID,之后父进程继续执行原代码,子进程会在合适的时机开始运行,并也运行父进程的代码。

exec()函数会首先确认系统可以解析并执行这个可执行程序,如果格式可识别,则按照格式对应解析函数进行执行。如果是ELF文件(Linux系统中常见的可执行程序格式),则执行过程中,会根据文件的段头部表,依次对程序以及动态链接程序的代码段、数据段进行内存映射,并修改内核态堆栈中eip、esp寄存器的值,使其分别指向程序的入口点以及新的用户态堆栈顶。

在动态链接的程序运行时,会在其加载过程中,针对各个链接的数据(GOT表中)、函数(PLT表、GOT表中)的表项信息进行链接数据与函数的内存映射,并对GOT表中的内容进行重定位,确定其最终绝对地址,之后便将链接器跳转到.text代码正文,开始正常执行程序。

附录1.fork()函数与exec()函数运行示例。

fork函数的作用是在程序运行中创建出当前运行的进程的子进程,而exec函

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值