首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

elf文件解析器_elf文件下载

前两天网上投递了简历,面试了一家C++公司,然后对面负责人给我发了一份笔试题,题目是: 请写出一个ELF文件解析器, 需要能打印出所有segments和sections,并列出每个section和segment...源码如下(”elf.h” 头文件见后文),它会报warning,但是貌似不太影响最后结果: #include #include #include "elf.h" int...1, fp); if (0 == a) { printf("fail to read head\n"); exit(0); } // 判断elf文件类型 if(elf_head.e_ident[0]...= 'F') { printf("Not a ELF file\n"); exit(0); } // 解析section 分配内存 section * 数量 Elf64_Shdr *shdr = (Elf64...“elf.h” ,里面定义了elf文件结构的各种数据结构,能够使解析elf的过程中更加方便: #ifndef _QEMU_ELF_H #define _QEMU_ELF_H #include <inttypes.h

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

ELF文件格式解析

参考资料 ELF文件格式解析 《Android软件安全权威指南》8.4-原生程序文件格式 Android平台感染ELF文件实现模块注入 elf文件类型六 Dynamic Section(动态section...所以综上所述,整个SO文件的大小= e_shoff + e_shnum * sizeof(e_shentsize) + 1 有兴趣可以参考这篇文章来了解更多:ELF文件格式解析,下面很多部分都借鉴了这篇文章的内容...} Elf32_sym; 在010Editor里解析完成后这部分的内容就是dynamic_symbol_table了 其中的symname值就是在.dynstr的偏移了。...DT_SYMBOLIC 16 ignored ignored optional 在共享object库中出现的该元素为在库中的引用改变动态连接器符号解析的算法。...ELF加载   经过测试,ELF文件被加载时会每个LOAD段的记录将文件进行加载,具体来说,就是将ELF文件从LOAD段的p_offset位置读取p_filesz大小的数据,映射到内存中ELF基址+p_vaddr

2.3K40

【Android 逆向】ELF 文件格式 ( ELF 文件简介 | ELF 文件结构 )

文章目录 一、ELF 文件简介 二、ELF 文件结构 一、ELF 文件简介 ---- ELF 文件是 Executable and Linkable Format ( 可执行 和 可链接 格式 ) 的文件...可执行文件 , 编译中间文件 , 都是 ELF 格式的文件 ; 在 Android 应用运行时 , ELF 文件的大部分内容 , 会被 映射到内存中 ; 这就意味着 Android 应用内存中的很多数据..., 会遵循 ELF 文件格式的规范 ; ELF 文件格式最常见的形式就是 .so 动态库 ; ELF 文件的特点 : ELF 文件是以 7F 45 4C 46 开头 , 其中 7F 是一个二进制标志..., 45 4C 46 是 ELF 字符对应的 ASCII 码 ; 二、ELF 文件结构 ---- ELF 文件由以下四部分组成 : ELF 文件ELF 程序头 : ELF 程序头 会告知 节区头部表的位置...; 节区或段 节区头部表 : 节区头部表 会告知 ELF 文件中有多少个 节区 , 一般 节区头部表 一般都在 ELF 文件尾部 ;

1.1K30

【Android 逆向】使用 Python 代码解析 ELF 文件 ( PyCharm 中创建 Python 程序 | 导入 ELFFile 库 | 解析 ELF 文件 )

文章目录 一、PyCharm 中创建 Python 程序 二、导入 ELFFile 依赖库 三、 解析 ELF 文件 四、 博客源码 一、PyCharm 中创建 Python 程序 ---- 在 PyCharm...ELF 文件 ---- 工程结构 : 将要解析的 libwtcrypto.so 动态库拷贝到工程根目录 , 执行 main.py 即可完成解析 ; 完整代码示例 : # coding=utf-8 #...解析 elf 文件需要导入的依赖库 # 安装 pyelftools 库 from elftools.elf.elffile import ELFFile def main(): # 要解析的动态库路径...elf_path = r'libwtcrypto.so' # 打开 elf 文件 file = open(elf_path, 'rb') # 创建 ELFFile 对象..., 该对象是核心对象 elf_file = ELFFile(file) # 打印 elf 文件头 print(elf_file.header) # 打印 程序头入口

83920

【Android 逆向】ELF 文件格式 ( ELF 文件头 | ELF 文件头标志 | ELF 文件位数 | ELF 文件大小端格式 )

文章目录 一、ELF 文件简介 二、ELF 文件头 三、ELF 文件头标志 四、ELF 文件位数 五、ELF 文件大小端格式 一、ELF 文件简介 ---- 在上一篇博客 【Android 逆向】ELF...文件格式 ( 安装 010 Editor 二进制查看工具的 ELF.bt 插件模板 | 安装 ELF.bt 模板 | 打开 ELF 文件 ) 中 , 准备 ELF 文件解析环境 , 在 010 Editor...中安装了 ELF.bt 模板 ; 二、ELF 文件头 ---- ELF 文件头区域如下 : 前 16 字节是 ELF 的标志 , 三、ELF 文件头标志 ---- 0 ~ 3 字节 : 是 0x7F...和 ELF 的 ASCII 码 ; 这是 ELF 文件的特征 ; 四、ELF 文件位数 ---- 4 字节 : 表示该 ELF 文件的位数 32 位还是 64 位 ; 值为 01 , 表示该 ELF...文件是 32 位 文件 ; 五、ELF 文件大小端格式 ---- 5 字节 : 表示 有效位 格式 , 取值 LSB / MSB ; 此处值为 1 , LSB 格式 ; 这个值由编译器决定 ; 有些

88810

ELF文件程序表头和代码实现ELF文件加载

前面章节我们了解了ELF文件的头部结构,这次我们深入了解另一个非常重要的数据结构,那就是程序表头。操作系统严重依赖该结构来加载ELF文件或是实现动态链接。...程序表头反映的是当ELF加载到内存后所形成的“视图”或结构,也就是说ELF文件存在硬盘上或者被加载到内存,它展现出来的形态不一致。...最后p_align表示内存对齐方式,它的取值为2的指数,同时p_vaddr必须等于(p_offset % p_align) 了解了ELF二进制内部原理后,我们需要实现手动加载ELF文件,实现这个目标,我们需要依赖一个库叫...Binary类用于对整个elf文件的抽象,通过它可以访问ELF文件相关信息,Section是对前面章节描述的段对象的抽象,Symbol是对前面章节符号表对象的抽象。...load_binary是来自libbfd库提供的函数,它将elf文件加载到内存中。

1.5K30

ELF文件格式

文章目录 源码到可执行文件 ELF文件格式 ELF File header Program header Section header 工具 Symbol Table 源码到可执行文件 linux中四类文件使用...例如这些扩展名的文件一般都是elf格式:.axf, .bin, .elf, .o, .prx, .puff, .ko, .so, and .mod ELF文件格式 引用wiki的一张图: https...://en.wikipedia.org/wiki/Executable_and_Linkable_Format ELF header在文件开始处描述了整个文件的组织 Section提供了目标文件的各项信息...Section包含目标文件除了ELF文件头、程序头表、section头表的所有信息,而且目标文件section满足几个条件: 目标文件中的每个section都只有一个section头项描述,可以存在不指示任何...符号表入口结构定义如下,可在/usr/include/elf.h中可以找到文件头结构定义: typedef struct elf64_sym { Elf64_Word st_name; /* Symbol

1.5K30

ELF文件结构描述

ELF目标文件格式最前部ELF文件头(ELF Header),它包含了描述了整个文件的基本属性,比如ELF文件版本、目标机器型号、程序入口地址等。...ELF文件头结构及相关常数被定义在“/usr/include/elf.h”,因为ELF文件在各种平台下都通用,ELF文件有32位版本和64位版本的ELF文件文件头内容是一样的,只不过有些成员的大小不一样...段表 段表就是保存ELF文件中各种各样段的基本属性的结构。段表是ELF除了文件以外的最重要结构体,它描述了ELF的各个段的信息,ELF文件的段结构就是由段表决定的。...只有分析ELF文件头,就可以得到段表和段表字符串表的位置,从而解析整个ELF文件。 链接的接口-符号 链接的过程的本质就是要把多个不同目标文件之间相互“粘”到一起。...链接器在程序最终连接成可执行文件将其解析成正确的值,注意,只有使用ld链接生成最终可执行文件的时候这些符号才会存在。

1.5K50

ELF文件-逆向工具

ELF文件-逆向工具 转载一篇逆向工具的文章: 原文 1、ELF文件内容解析 readelf: 可解析ELF文件的所有内容; strings: 查看ELF文件中的字符串; file : 查看ELF...文件的信息; nm : 查看ELF文件中的符号信息; ldd : 查看ELF文件所依赖的库文件; 2、objdump 用于对ELF文件进行反汇编; objdump -d ;反汇编部分可执行的二进制代码...; xxd -s -10 ;以ELF文件尾处的第1个字节为参照,从第10个字节处开始显示; 6、编辑ELF文件使用vi/vim与命令xxd配合完成;STEP1:使用vi/vim以二进制模式打开ELF文件...xxd -r STEP5:在vi/vim的命令模式下输入以下内容,保存二进制格式的ELF文件:wq —备注— % :表示当前文件中显示的所有行; !...xxd"表示把当前文件中的所有行传递给外部命令xxd; 7、动态调试工具 ltrace: 跟踪ELF文件或进程对库函数的调用(library_function_call); strace: 跟踪ELF

73120

【Android 逆向】ELF 文件格式 ( ELF 文件类型 | ELF 文件对应 CPU 架构 | ELF 目标文件版本 | 可执行程序起始地址 )

文章目录 一、ELF 文件类型 ( 动态库文件 ) 二、ELF 文件对应 CPU 架构 三、ELF 目标文件版本 四、可执行程序起始地址 一、ELF 文件类型 ( 动态库文件 ) ---- ELF 文件头...第 16 ~ 17 字节 : ELF 文件类型 , 动态库文件 / 可执行文件 / 静态库文件 / 链接文件 ; 03 00 表示该 ELF 文件是动态库文件 ; 03 00 小端格式 , 低位在低地址..., 值为 3 ; 二、ELF 文件对应 CPU 架构 ---- ELF 文件头 第 18 ~ 19 字节 : ELF 文件对应的 CPU 架构体系 , x86 / arm / mips ; 03 00...表示该 ELF 文件对应的 CPU 架构师 x86 架构 ; 03 00 小端格式 , 低位在低地址 , 值为 3 ; 三、ELF 目标文件版本 ---- ELF 文件头 第 20 ~ 23 字节...是可执行文件 , 应该从哪个地址开始执行代码 ; 该值在可执行 ELF 文件中才有意义 , 动态库文件没有意义 ; 00 00 00 00 小端格式 , 低位在低地址 , 值为 0 ; 当前解析ELF

66420

ELF文件格式简介

2 ELF文件格式   在编译过程中ELF文件格式在链接和程序的运行阶段的格式不同。...+1]的偏移),未使用的字节会被初始化为0,解析ELF文件时需要忽略对应的字段;   EI_MAG0,EI_MAG1,EI_MAG2,EI_MAG3,EI_CLASS,EI_DATA,EI_VERSION...每个操作系统都支持一组链接模式,主要分为两类(也就是常说的动态库和静态库): Static:静态绑定的一组目标文件、系统库和库档案(比如静态库),解析包含的符号引用并创建一个完全自包含的可执行文件; Dynamic...可以用下面的代码分别解析出bind,type,info三个属性: #define ELF32_ST_BIND(i) ((i)>>4) #define ELF32_ST_TYPE(i) ((i)&0xf...这是因为dynsym中的符号只有在动态链接时也就是运行时才能被解析

1.8K30

【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★

文章目录 一、完整代码示例 二、执行结果 三、博客资源 一、完整代码示例 ---- 使用 Python 解析 ELF 文件完整代码示例 : # coding=utf-8 # 解析 elf 文件需要导入的依赖库..., 用于解析 ELF 文件 from capstone import * def main(): # 要解析的动态库路径 elf_path = r'libwtcrypto.so'...# 打开 elf 文件 file = open(elf_path, 'rb') # 创建 ELFFile 对象 , 该对象是核心对象 elf_file = ELFFile(file...) # 打印 elf 文件头 print(elf_file.header) # 打印 程序头入口 个数 print(elf_file.num_segments())...会标明每条汇编代码中对寄存器的影响 # 如 : 本条汇编代码中 , 会读写哪些寄存器 capstone.detail = True # 向汇编解析器中传入

66110

【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )

文章目录 一、ELF 程序头入口大小 二、ELF 程序头入口个数 三、ELF 文件节区头入口大小 四、ELF 文件节区头入口个数 五、字符表序号 一、ELF 程序头入口大小 ---- ELF 文件头 第...32 字节 ; 二、ELF 程序头入口个数 ---- ELF 文件头 第 44 ~ 45 字节 : ELF 程序头入口个数 ; 这里是 7 个 ; 07 00 小端格式 , 低位在低地址 , 值为...7 ; 如下图所示 , 程序头是由 7 个入口组成 , 每个入口大小是 32 字节 ; 三、ELF 文件节区头入口大小 ---- ELF 文件头 第 46 ~ 47 字节 : ELF 文件节区头入口大小字节数...文件节区头入口个数 ---- ELF 文件头 第 48 ~ 49 字节 : ELF 文件节区头入口个数 ; 这里是 21 个 ; 15 00 小端格式 , 低位在低地址 , 值为 21 ; 下图选中的部分..., 就是一个节区头入口的大小 , 有 21 个节区头入口 , 每个节区头入口大小 40 字节 ; 五、字符表序号 ---- ELF 文件头 第 50 ~ 51 字节 : ELF 文件 字符表序号 ;

92120

【Android 逆向】ELF 文件格式 ( 安装 010 Editor 二进制查看工具的 ELF.bt 插件模板 | 安装 ELF.bt 模板 | 打开 ELF 文件 )

文章目录 一、搜索并下载 ELF.bt 模板 二、安装 ELF.bt 模板 三、打开 ELF 文件 一、搜索并下载 ELF.bt 模板 ---- 进入 010 Editor 工具的插件模板下载页面 http.../010editor/repository/files/ELF.bt ; 可以在浏览器下载中 , 新建下载项 , 下载该 ELF.bt 文件 ; EXE.bt : 文件地址 https://www.sweetscape.com.../010editor/repository/files/DEX.bt 可以在浏览器下载中 , 新建下载项 , 下载该 ELF.bt 文件 ; 二、安装 ELF.bt 模板 ---- 选择 " 菜单栏.../ 模板 / 编辑模板列表 " 选项 , 在弹出的对话框中 , 新建一个模板 , 并指定模板对应文件 ; 三、打开 ELF 文件 ---- 选择打开 ELF 文件 : 打开文件后 , 选择 "...菜单栏 / 模板 / ELF 模板 " 选项 , 此时就可以在 模板结果 面板 , 看到 ELF 文件的四个组成部分 ;

1.4K10

扒一扒ELF文件

ELF文件类型 2.1 可重定位目标文件(.o文件) 2.2 可执行目标文件(a.out文件) 2.3 共享对象文件(.so文件) 3. ELF文件作用 4....ELF文件格式 4.1 从编译和链接角度看ELF文件(可重定位目标文件) 4.2 从程序执行角度看ELF文件(可执行文件) 5.总结 1....ELF文件作用   ELF文件参与程序的连接(建立一个程序)和程序的执行(运行一个程序),所以可以从不同的角度来看待ELF格式的文件:   1.如果用于编译和链接(可重定位文件),则编译器和链接器将把...ELF文件格式 4.1 从编译和链接角度看ELF文件(可重定位目标文件) ?...从编译和链接角度看ELF文件 ELF头   每个ELF文件都必须存在一个ELF_He ader,这里存放了很多重要的信息用来描述整个文件的组织,如: 版本信息,入口信息,偏移信息等。

64920

ELF文件格式修复

在IDA动态调试-没啥卵用的静态加固中,我构造了一个畸形的ELF文件,虽然能够糊弄一下IDA的静态分析,但是动态分析无效。...新的疑问随之而来:如前面所述,我在构造畸形ELF文件的时候,直接把section头部表给删除了,还修改了ELF头部和section相关的字段,为啥不会影响执行呢?...到目前为止,我发现对文件格式解析最强大的,当属010Editor(假如有比这个好的,请告知我一下,非常感谢)。...网上可以下载到解析ELF文件的Template,但这个Template对于畸形ELF不做深入解析,为此,我花了1天时间学习了010Editor的语法,发现它的模板真的是非常强大。...最终也完成了对ELF Template的增强。 直接看看效果: ? 新增对动态链接表的解析 ? 新增对动态字符串表的解析 ?

2.3K61

ELF文件格式的详解

本文主要从elf文件的组成构造的角度来进行分析,将elf文件解析通过一步一步的分析得到里面的信息,同时通过python脚本解析,可以直观的看到文件的信息,通过本文的阅读,将对elf文件格式有着更加深刻的理解...当前的解析为00 0e。也就是14个节区为字符节区。 ? 到这里,头部信息的相关字段就解析完成了。 4.elf文件的节区(Section) elf文件中的节是从编译器链接角度来看文件的组成的。...通过readelf -l可以查看具体的可执行文件的细节。 ? 这里的信息和程序的加载直接相关。具体的elf文件加载过程这篇文章不会多说,后面会写文章专门叙述。本文的目的是elf文件格式的解析过程。...6.用python解析elf文件 为了验证上述的分析过程是否合理,可以通过python脚本来解析elf文件。得到elf文件相关的信息。目前采用的是python3进行解析。...这样就完成了一个elf文件解析过程。 7.总结 ELF文件经常的见到,但是要具体的分析ELF文件中所对应的具体的含义却需要费一番功夫。

5.7K54

ELF文件及android hook原理

ELF文件装载链接过程及hook原理 ELF文件格式解析 可执行和可链接格式(Executable and Linkable Format,缩写为ELF),常被称为ELF格式,在计算机科学中,是一种用于执行档...第二步 符号解析与重定位 使用第一步中收集到的信息,读取输入文件中段的数据、重定位信息,并且进行符号解析与重定位、调整代码中的地址等 使用ld链接器将”a.o”和”b.o”链接起来: $ld a.o b.o...符号解析与重定位 编译器在将”a.c”编译成指令时,它如何访问”shared”变量?如何调用”swap”函数?...因为ELF目标文件不需要被装载,所以它没有程序头表,而ELF的可执行文件和共享库文件都有。 使用readelf查看程序头表。 ?...动态加载器解析结束,可以看到got表项正确指向了libc动态库中printf的地址 ?

3.6K81
领券