Android漫游记(2)---ELF可执行文件格式

本文介绍了Android系统上使用的ELF可执行文件格式,它是Android上的.exe或.dll等格式。通过分析ELF Header和Section Headers,阐述了ELF文件中如.data、.text等区的信息,并以libc.so为例,详细讲解了各个字段的含义。最后,提到了在链接加载时的视图,并建议通过编写简单的ELF读取程序来加深理解。
摘要由CSDN通过智能技术生成

    ELF是类Unix类系统,当然也包括Android系统上的可执行文件格式(也包括.so和.o类文件)。可以理解为Android系统上的exe或者dll文件格式。理解ELF文件规范,是理解Android系统上进程加载、执行的前提。下面我们就来一步步了解这ELF到底是个啥玩意儿(以Arm 32 ELF格式为主)!当然,网上关于ELF的介绍已经非常多,最好的手册还是直接看ELF官方的手册,我这里只是对ELF的文件做个纲领性介绍,然后直奔主题,比如.GOT .PLT或者R_Arm_Jump_Slot,R_Arm_Relative之类的玩意儿微笑

    还是以libc.so为例来介绍,先看通过arm-linux-androideabi-readelf生成的ELF文件,很长,我们先看一个片段:


我们挑几个有意思的字段内容来说明。

首先ELF Header:顾名思义,这是所有ELF文件都有的”头“。里面包含了ELF文件的”纲领性“信息,如”Machine“表示当前CPU架构,该例为arm,”Start of Sections“表示”区(Section)头”的偏移字节数等等。

而Section Headers则列出了所有包含在文件中的Section区信息列表。如.data表示数据区,.text表示代码区等等。下面用一张图来对ELF的文件格式有个总览:


左边是静态视图,而右边则是链接加载时的视图,都是同一个文件的两种状态。

/* ELF Header */
typedef struct elfhdr {
	unsigned char	e_ident[EI_NIDENT]; /* ELF Identification */
	Elf32_Half	e_type;		/* object file type */
	Elf32_Half	e_machine;	/* machine */
	Elf32_Word	e_version;	/* object file version */
	Elf32_Addr	e_entry;	/* virtual entry point */
	Elf32_Off	e_phoff;	/* program header table offset */
	Elf32_Off	e_shoff;	/* section header table offset */
	Elf32_Word	e_flags;	/* processor-specific flags */
	Elf32_Half	e_ehsize;	/* ELF header size */
	Elf32_Half	e_phent
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值