Linux elf文件的加载过程分析

当在Linux shell中启动程序时,子进程通过execv函数加载新的ELF程序。本文分析了ELF文件的加载过程,包括ELF头、段和segment。ELF包含代码段、数据段、只读数据段等,加载时主要涉及PT_LOAD类型的segment映射到内存,更新进程的内存地址空间,设置入口地址,并可能涉及动态链接。
摘要由CSDN通过智能技术生成

前言


在linux shell命令行启动一个程序时,实际上新启动的进程是作为shell进程的子进程存在的。shell进程会先fork出一个子进程,此时子进程是父进程的一个拷贝,所以其代码段和数据段都来自于父进程,但是子进程是要执行新的程序的,所以会调用execv函数,载入新的程序,此过程中,子进程的代码段,数据段等都会替换成新的进程的。
本文主要是对elf文件的加载过程做一个简要的分析。

linux只支持ELF格式的可以行程序吗?


这个答案肯定是否定的!linux支持的可执行程序格式是通过register_binfmt注册的。elf格式的可执行程序加载器通过register_binfmt(&elf_format);注册。

ELF格式的可执行文件包括哪些内容?


了解ELF格式的可执行文件的加载过程,首先要先知道ELF可执行文件的格式。
ELF文件有一个ELF header,ELF header指明program header和section header的在文件中的位置以及大小;section header指明各个段在文件中的位置以及属性,这些段包括我们熟悉的代码段,数据段,只读数据段等等;program header指明各个segment在文件中的位置和属性,segment是一个或多个section的集合。我写了一个极简的程序,编译成ELF可执行程序,并通过readelf -l命令查看program header信息,如下:

Elf file type is EXEC (Executable file)
Entry po
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值