ELF】的更多相关文章

ELF文件格式是一个开发标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件 可执行文件 共享库 现在分析一下上一篇文章中经过汇编之后生成的目标文件max.o和链接之后生成的可执行文件max的格式,从而理解汇编.链接和加载执行的过程. 一.目标文件 ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器看来它是由Program Hea…
为什么要使用动态链接? 在现代的linux系统中,假设一个普通的程序会使用到c语言静态库至少1MB以上,那么,如果我们的机器运行100个这样的程序,就用浪费近100MB的内存:如果磁盘有2000个这样的程序,就要浪费2GB的内存. 静态链接对程序的更新.发布等也会带来问题.比如程序program1使用由第三方厂家提供的库lib.o,当厂家更新lib.o时,程序program1的厂商必须先得到lib.o,那后将program1重新链接,并将整个新的program1发布给客户.可以想象,如果一个这个…
一直对ELF目标文件是怎样链接成可执行文件感到比较的疑惑,ELF文件里面的重定位段是怎样解决符号引用问题的?前几天偶然看了<深入理解计算机系统>里面讲了这个问题,看了之后对里面的实现机制终于有了一定的理解. 当有链接器链接多个可重定位的共享对象时,共享对象时怎样合并的呢?很简单,链接器将相同类型的节合并在一起,比如将所有输入文件的.text合并到输出文件的.text段,接着是.data段,.bss段等. 链接器扫描所有的输入目标文件,并且获得它们各个节的长度,属性和位置,并将输入目标文件中的符…
今天是出道以来第一次安装JDK1.3,大学的时候接触的也已是JDK1.4,而且是在Red Hat Enterprise Linux Server release 6.6上,安装JDK1.3是由于软件组一个项目使用的一个老版本的WebLogic的原因,由于各种原因一直没有升级. 在安装过程中遇到了 /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory错误. ./j2sdk-1_3_1_20-linux-i586.bin…
ilocker:关注 Android 安全(新手) QQ: 2597294287 符号哈希表用于支援符号表的访问,能够提高符号搜索速度. 下表用于解释该哈希表的组织,但该格式并不属于 ELF 规范. bucket 和 chain 数组中都保存有符号表的索引,数组大小分别为 nbucket 和 nchain. 先来看 android linker 中的 hash 函数: 给定一个符号名字,返回一个哈希值 x,然后由 bucket[x%nbucket] 得到一个符号表索引 y,如果索引 y 对应的符…
ilocker:关注 Android 安全(新手) QQ: 2597294287 一个段 (segment) 由一个或多个节 (section) 组成,但这对 android linker 是透明的,linker 在加载程序时没有用到节信息.所以对于一个 so 文件,修改 ELF Header 中和节有关的成员 (e_shoff.e_shentsize.e_shnum) 不会影响程序运行. 文本段 (也叫代码段) 包含只读指令和数据,通常包含如下这些节: 通常 android so 的第一个 L…
linux实践之ELF文件分析 下面开始elf文件的分析. 我们首先编写一个简单的C代码. 编译链接生成可执行文件. 首先,查看scn15elf.o文件的详细信息. 以16进制形式查看scn15elf.o文件. 查看scn15elf.o中各个段和符号表的信息. 各个段的详细信息如下. 符号表的信息如下: 使用readelf命令查看各个段的详细信息: 段表信息如下: 符号表信息如下: 下面让我们开始分析文件头吧! 由于我的虚拟机是32位的,我下面就主要以32位的系统进行分析,就不比较32位机和64…
ELF (Executable Linkable Format)UNIX类操作系统中普遍采用的目标文件格式 . 首先要知道它有什么作用:工具接口标准委员会TIS已经将ELF作为运行在Intel32位架构之上的各类型操作系统的可导出对象文件格式标准.ELF标准为开发者提供了一组横跨多运行环境的二进制接口定义来组织软件开发 :ELF 标准的目的是为软件开发人员提供一组二进制接口定义,这些接口可以延伸到多种操作环境,从而减少重新编码.重新编译程序的需要.接口的内容包括目标模块格式.可执行文件格式以及调…
一.ELF文件格式概述 1. ELF文件 ELF:Executable and Linking Format,是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西. 2. 三种类型 (1)可重定位文件 编译器和汇编器创建 运行前需要被链接器处理 (2)可执行文件 完成了所有重定位工作和符号解析 除了运行时解析的共享库符号 (3)共享库文件 链接器需要的符号信息 运行时可以直接执行的代码 二.分析一个ELF文件 以一个最简单…
实际上,我们要做的工作是根据内核的Program header table的信息进行类似下面这个C语言语句的内存复制: memcpy(p_vaddr, BaseOfLoaderPhyAddr+p_offset, p_filesz); 复制可能不止一次,如果Program header有n个,复制就进行n次. 每一个Program header都描述一个段,语句中的P_offset为段在文件中的偏移,p_filesz为段在文件中的长度,p_vaddr为段在内存中的虚拟地址. 由ld生成的可执行文件…
ELF文件的结构如下图所示: ELF文件由4部分组成,分别是ELF头(ELF header).程序头表(Program header table).节(Sections)和节头表(Section header table). 实际上,一个文件中不一定包含全部这些内容,而且它们的位置也未必如上图所示这样安排,只有ELF头的位置是固定的,其余各部分的位置.大小等信息由ELF头中的各项值来决定. ELF header的格式如下代码所示: #define EI_NIDENT 16 typedef str…
本文只讨论如何调试被加壳的ELF文件,包括调试中的技巧运用及调试过程中可能遇到的问题的解决方法,不包含如何还原加固的DEX本文将以某加壳程序和某加固为目标. 一.ELF格式简介 ELF全称:Executable and Linkable Format,是Linux下的一种可执行文件格式. 此种文件格式和WINDOWS一样,常见分为两种类型: 1.可执行文件(Executable File),对应PE子类型:EXE 2.共享目标文件(Shared Object File),后缀名:.so,对应PE…
ilocker:关注 Android 安全(新手) QQ: 2597294287 ELF Object files 参与程序的链接和执行,从这两个角度分别有两种视图: ELF header 位于文件的最开始处,描述整个文件的组织结构. Program Header Table 告诉系统如何创建进程镜像,在执行程序时必须存在,在 relocatable files 中则不需要.每个 program header 分别描述一个 segment,包括 segment 在文件和内存中的大小及地址等等.…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 以 32 位的 ELF header 数据结构为例: #define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件中会包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息.Elf32_Shdr 结构中有一个 sh_type 成员,用于指明 section 的类型. SHT_NULL:无效的 section header,没有与之对应的…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 ELF 文件可以包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息. ELF Header 中的 e_shoff 给出了 section header table 在 ELF 文件中的字节偏移量,e_shentsize 指明在 sec…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 链接器把一些独立的 object files 和库文件链接起来,形成可执行文件.在这个过程中,链接器需要解决一些符号的引用以及指令的重定位. 除此之外,还有一个动态链接的过程.比如有些符号是定义在某个 so 文件中的,需要由动态链接器在装载的过程中进行一些符号查找和地址重定位的工作.要完成此工作,动态链接器需要一些信息,它们存储在一些特殊的 section 中,比如 .dynamic. section 和…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 字符串表中包含若干以 null 结尾的字符串,这些字符串通常是 symbol 或 section 的名字.当 ELF 文件的其它部分需要引用字符串时,只需提供该字符串在字符串表中的位置索引即可. 字符串表中首先是一个空串,用于表示一个空名字,所以字符串表的第一个字节是“\0”. 下图展示了一个长度为 25 字节的字符串表: 字符串引用示例: 既可以引用一个完整的字符串,也可以引用一个字符串的子串. 一个目…
我是天空里的一片云,偶尔投影在你的波心,你不必讶异,更无须欢喜,在转瞬间消灭了踪影.你我相逢在黑夜的海上,你有你的,我有我的,方向:你记得也好,最好你忘掉,在这交会时互放的光亮! —— 徐志摩·偶然 ilocker:关注 Android 安全(新手) QQ: 2597294287 上篇笔记中说过,Elf32_Sym 结构的 st_info 成员包含了符号的类型和绑定属性等信息. 在 android linker 做重定位时,如果遇到未定义的符号,会判断该符号是否是一个弱引用符号,如果不是,则出错…
catalog . INTRODUCTION . THE PROCESS IMAGE . THE CORE IMAGE . EXECUTABLE RECONSTRUCTION . FAILURES IN RECONSTRUCTION . USES OF RECONSTRUCTION . Helper Tools . Code For New Linux Kernel 1. INTRODUCTION This article documents the results from experimen…
.plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成. .rel.plt保存了重定位表的信息,可以使用lazy的连接方式 .got据说是保存了elf文件本身的各个符号的偏移量,即不要动态链接,未证明 .got.plt保存了重定位地址. 比如printf是一个重定位符号,需要连接该符号时过程是这样: main函数call  .plt段中的一个地址,这里的第一句话就是调转到.…
转自:http://blog.csdn.net/wanglei2258/article/details/24961233 [CentOS]安装软件:/lib/ld-linux.so.2: bad ELF interpreter解决   环境: [orangle@localhost Downloads]$ uname -m&&uname -r x86_64 2.6.32-220.el6.x86_64 [orangle@localhost Downloads]$ cat /etc/redhat…
将Altera FPGA的sof文件和NIOS II的elf固件合并为一个jic文件以使用Quartus Programmer烧写   我们在学习和调试NIOS II工程的时候,一般都是先使用Quartus II软件中提供的Quartus Programmer来烧写FPGA配置文件(SOF),然后NIOS II EDS中提供的Flash Programmer工具来进行烧写NIOS II的.这对于开发者来说,并没有什么不便,反而因为这种方式的灵活,为开发带了了很大的便利.然而,当我们的产品已经设计…
实践2.4 ELF文件格式分析 1.ELF文件头 查看/usr/include/elf.h文件: #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; /* 魔数和其他信息 */ Elf32_Half e_type; /* 目标文件类型 */ Elf32_Half e_machine; /* 硬件平台 */ Elf32_Word e_version; /* elf头部版本 */ Elf32_Addr e…
Linux及安全——ELF实践  一.分析ELF文件头 二.通过文件头找到section header table,理解内容 三.通过section header table 找到各section 四.理解常见.text .strtab .symtabl .rodata 等section 1.编写测试文件test.c 2.使用如下命令编译生成test.o文件 gcc -c test.c -o test.o 使用如下命令查看test.o文件的大小 ls -l test.o 得知test.o大小为7…
一.ELF的部分结构定义 elf header(定义在/usr/include/elf.h)//64位的系统ELF文件头包括以下两个部分 #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT];/* Magic number and other info */ Elf32_Half e_type; /* Object file type */ Elf32_Half e_machine; /* Archite…
目录 . 引言 . ELF文件格式 . ELF格式分析工具 0. 引言 0x1: ELF文件类型 ELF文件标准里把系统中采用ELF格式的文件归为以下几类 . 可重定位文件(Relocatable File) 这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类 ) .o文件 . 可执行文件(Executable File) 这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件,它们一般都没有扩展名 ) /bin/bash文件 . 共享目标文件…
来源: <程序员的自我修养>3.4节. 补充: http://wiki.osdev.org/ELF http://www.linux-mag.com/id/116/ http://en.wikipedia.org/wiki/A.out http://osr507doc.sco.com/en/man/html.FP/a.out.FP.html…
ELF Spec Generic System V Application Binary Interface,ELF-64 Object File Format AMD64 System V ABI, AMD64 Supplement ARM ELF for the ARM Architecture IA-32 System V ABI, Intel386 Architecture Processor Supplement IA-64 Itanium Software Conventions a…
参考文献: <ELF V1.2> <程序员的自我修养---链接.装载与库>第6章 可执行文件的装载与进程 第7章 动态链接 <Linux GOT与PLT> 开发平台: [root@tanghuimin dynamic_link]# uname -a Linux tanghuimin -.el6.x86_64 # SMP Fri Feb :: UTC x86_64 x86_64 x86_64 GNU/Linux 实例讲解之前先来一段理论铺垫,文字很繁琐但很必要事先了解.…