ELF文件格式及其他

1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序。ELF文件(目标文件)格式主要三种类型:

(1)可重定向文件(relocatable file):文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件。(目标文件或者静态库文件,即linux通常后缀为.a和.o的文件)
注:o: 编译的目标文件;a: 静态库,其实就是把若干o文件打了个包;so: 动态链接库(共享库) ;lo: 使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息 ;la: 使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息。
可执行文件(executable file):用于提供程序的进程映像,加载到内存执行。OS文件是其中一种。(例如bash,gcc等)
共享目标文件(shared object file):共享库。文件保存着代码和合适的数据,用来被下连接编辑器和动态链接器链接。(linux下后缀为.so的文件。)目标文件既要参与程序链接又要参与程序执行。
此处主要分析可执行文件类型。
这里写图片描述
ELF格式包括:ELF头部:描述整个文件的组织;
程序头部表:可选的,告诉系统如何创建进程映像。用来构造进程映像的目标文件必须具有的程序头部表。
节区:包含多个,包含连接视图的大量信息:指令、数据、符号表、重定位信息等等。
节区头部表:包含了,描述文件节区的信息,每个节区在表中都有一个项,每一项给出诸如节区名称、节区大小这类信息。

ELF文件头详细内容:
这里写图片描述
这里写图片描述
2、链接地址VS加载地址
(1)链接地址:是虚拟地址,代码中的绝对跳转地址和全局变量的地址都依赖于链接地址,链接地址改变时,这些地址也会改变,但相对跳转不依赖与链接地址。
(2)加载地址:程序被加载到的物理地址
(3)关系:链接地址经过地址转换要等于物理地址(加载地址)
(4)内核的加载地址:0x100000处,参加bootmain.c
(5)内核的链接地址:0xf0100000处,但是我们没有那么大的内存,故:ELFHDR->e_entry&0xFFFFFF
3、装载内核
(1)内核加载:内核被加载到0x0010000(物理地址)开始的内存中,根据Rlf文件格式,把内核镜像中的各个段都加载到指定的虚拟地址上。
(2)实现:加载内核代码bootmain.c和Elf文件格式的定义elf.h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值