可执行文件(ELF文件)解析

缩写:

ABI (Application Binary Interface) 应用程序二进制接口

TIS (Tool Interface Standards) 工具接口标准

TIS 委员会:一个微型计算机工业联合组织,致力于为32位操作系统下的开发工具提供标准化的软件接口。包括:目标标志格式、可执行文件格式、调试信息格式。委员会成员来自 Absoft、Autodesk、Borland、IBM、Intel,etc。

 

1. 文件格式

    可执行程序 也是一个文件。类似于txt,markdown等文件。不同格式文件为不同目的存在。txt文件目的服务于人阅读所以存储成可以阅读的ASCII、UTF-8,内容的bit 0、1 符合 ASCII、UTF-8的编码规范存储。同理markdown 要符合md格式规范。可执行程序文件的阅读对象是操作系统。不同操作系统平台对自己阅读的可执行程序有不同的规范要求。下表为操作系统对应的可执行程序文件格式:

    linux   : ELF (Executable and Linking Format)

    Mac (MacOS / iOS) : mach-O (mach-object)

    Windows : PE (Portable Executable)

    本文关注 linux OS ELF 格式的了解。

2. ELF 历史、标准 及 工具

    最初由 Unix 系统实验室 作为 应用程序二进制接口 的一部分制定发布。之后 ELF文件格式规范 由TIS委员会制定。

    英文 标准原文:https://refspecs.linuxbase.org/elf/elf.pdf

    工具:作用  (下面内容,本人大部分位置,接下来只展开部分,需要详细,请告知,另拿出来分析讨论)

    strings : 输出 ELF 中所有字符串

    strip : 删除 ELF 中无用信息

    nm : 列举 ELF 目标文件 符号

    size : 显示 目标文件段(section)大小,以及目标文件大小

    readelf : 显示 ELF 文件的内容

    objdump : 显示目标文件信息,可用于反汇编

    ar : 建立 start library

    addr2line : 将地址转换成文件、行号

  接下来基于 readelf 工具对 ELF 文件 展开分析。

3. ELF文件内容解析

3.1 readelf视角

3.1.1 readelf 历史

        GNU development tools 集合成员。License:"GNU Free Documentation License"

        其他 GNU 开源代码路径:http://ftp.gnu.org/gnu/

        readelf 包含在GNU的binutils工具包中: http://ftp.gnu.org/gnu/binutils

3.1.2 ELF 文件内容

       ELF 文件 包含 3个 Header:

             ELF Header:介绍 ELF的版本,大小端、Executable\Linking 等 其他概要信息

            Section Headers : 各个段信息,包括 段的大小,起始地址

            Program Headers : 应用程序加载到操作系统,供操作系统阅读。

     一个 Section group: (未知,待学习)

     多个Section:Section Headers 中提到的成员的展开。

4. 举例解析

4.1 可执行程序

1) main.c 源文件

2) main 可执行程序(程序运行时,cpu读取的文件),下图通过hexdump 读取, 截图了部分

3) 通过 readelf 读取 main,截图部分内容

 

 

4.2 动态lib库

4.3 源文件编译后的没有连接的二进制文件

 

reference:

1.   https://paper.seebug.org/papers/Archive/refs/elf/Understanding_ELF.pdf 

2.   https://refspecs.linuxbase.org/elf/elf.pdf

3.   https://refspecs.linuxbase.org/  linux 各种基础资料的获取地址

4.   https://blog.csdn.net/lcxhjg/article/details/80938350   工具分析的博客

5.   https://refspecs.linuxfoundation.org/

6.  https://refspecs.linuxbase.org/elf/index.html  elf 历史介绍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值