Android在NDK开发工具中提供了readelf,用来帮助开发者查看编译后目标文件的组成结构和具体内容。

常用的有以下几个功能选项:

1)-h或者--file-header

显示在ELF文件头里包含的所有信息,:

同样是显示ELF文件头的信息,readelf比objdump要详细的多。

2)-l或者--program-headers或者--segments

显示程序头表信息,包扩有几个段,每个段的属性,以及每个段中包含有哪几个节(Section):

3)-S或者--section-headers或者--sections

显示节区表内的所有信息,包括每个节的属性,注意这里是用的是大写的“S”:

4)-t或者--section-details

用来显示所有节的详细信息,感觉上但从信息量上来说,和前面的“-S”没有什么大的不同:

5)-e或者--headers

显示所有头的信息,包括ELF文件头、程序头和节头,也就是“-h -l -S”的组合。

6)-s或者--syms或者--symbols

显示符号表的信息,包含静态符号表(.symtab)和动态符号表(.dynsym):

如果只关心动态符号表,可以直接使用“--dyn-syms”。

7)-r或者--relocs

显示所有重定位入口的信息,例如:

8)-d或者--dynamic

显示动态节区的内容

9)-x或者--hex-dump=<number|name>

显示某个节区的二进制码,具体哪个节可以用该节的编号或者名字来指定,例如“-x .text”:

总体看来,就察看ELF内容来说,readelf和objdump在很多方面还是非常相似的,可以互补。

但是如果想看ELF文件中的汇编代码,还是objdump更强一点。

Android在NDK开发工具中提供了objdump,用来帮助开发者查看编译后目标文件的组成结构和具体内容。

常用的有以下几个功能选项:

1)-a或者--archive-headers

这个参数起到的作用和ar命令相似,用来看一个.a静态库文件中包含了哪些目标文件。

2)-f或者--file-headers

输出目标ELF文件头中包含的信息,例如:

表明这是个ELF文件,支持处理器指令集是armv5te,等等。总体来说,信息量有限。

3)-h或者--[section-]headers

输出目标文件中节表(Section Table)中所包含的所有节头(Section Header)的信息,:

可以看到,这个文件共有18个有效节区。从中,我们可以了解到每个节区的名字,大小,和文件头的偏移位置,对齐属性,以及其它的一些属性。

4)-x或者--all-headers

显示目标文件的所有头的信息,包括ELF文件头、程序头(Program Header)和节头(Section Header)。除了这些头之外,还包括动态节区(Dynamic Section)和符号表(Symbol Table)内的信息。例如:

5)-d或者--disassemble

反汇编目标ELF文件中包含可执行指令的哪些节区中的内容,:

如果有汇编语言的功底,就可以通过这个命令来探究目标文件中每个函数的实现逻辑,非常的方便。

6)-D或者--disassemble-all

-D与前面的-d类似,唯一的不同是,用-D会反汇编目标ELF文件中的所有内容,而前面的-d只会反汇编可执行代码的部分。

7)-s或者--full-contents

显示目标文件每个节区的二进制完整内容,对应的会显示该内容在目标文件中的偏移位置,还有将内容转换成ASCII码的形式,例如:

8)-S或者--source

混合显示源码和汇编代码,如果编译目标文件的时候指定了-g参数的话,效果会非常明显。否则,和-d参数没有什么区别,事实上-S参数默认包含了-d参数。

9)-t或者--syms

输出目标文件的符号表(Symbol Table),即目标ELF文件中名字叫做.symtab节内的内容。

10)-T或者--dynamic-syms

输出目标文件的动态符号表(Dynamic Symbol Table),即目标ELF文件中名字叫做.dynsym节内的内容,:

通过这张表内的信息,可以看出由本ELF文件中导出的符号,和需要从别的动态库中导入的符号。如果第三列显示“*UND*”表明这个符号在本ELF文件中未定义,也就是说这个符号要从别的动态库中导入,其它的情况表明这个符号由本ELF文件中定义。

11)-r或者--reloc

显示目标文件的静态重定位入口。

12)-R或者--dynamic-reloc

这个参数仅仅对于动态目标文件有意义,比如动态库文件(.so)。

13)-j或者--section=<NAME>

表示只显示名字为“NAME”节区中的内容。

原文:https://blog.csdn.net/roland_sun/article/details/36649155

ELF文件查看利器之readelf和objdump用法相关推荐

  1. android objdump 用法,ELF文件查看利器之objdump用法

    Android在NDK开发工具中提供了objdump,用来帮助开发者查看编译后目标文件的组成结构和具体内容. 常用的有以下几个功能选项: 1)-a或者--archive-headers 这个参数起到的 ...

  2. linux elf 文件查看工具 readelf

    Android在NDK开发工具中提供了readelf,用来帮助开发者查看编译后目标文件的组成结构和具体内容. 常用的有以下几个功能选项: 1)-h或者--file-header 显示在ELF文件头里包 ...

  3. Python爬虫利器之Beautiful Soup的用法,以及实例!

    可以利用 pip 来安装: pip install beautifulsoup4 源代码: import requests r = requests.get("https://python1 ...

  4. 几个命令查看ELF文件的“秘密”

    首发:公众号[编程珠玑] 作者:守望先生 网站:https://www.yanbinghu.com/2019/10/13/54745.html 前言 在Linux中,可执行文件的格式是ELF格式,而有 ...

  5. GCC的编译过程以及其同盟成员和ELF文件的分析

    文章目录 一.GCC的同盟成员介绍 1.GCC的介绍 2.同盟成员之Binutils 3.同盟成员之C 运行库 二.GCC的详细编译过程 1.编译的简介 2.预处理(Preprocessing) 3. ...

  6. 使用readelf和objdump查看ELF常见段

    文章目录 一.查看可重定位目标文件中的段 二.查看静态链接中的段 三.查看动态链接中的段 四.readelf常用命令 一.查看可重定位目标文件中的段 可重定位目标文件中给出了其中常见的段,解释了每个段 ...

  7. readelf命令和ELF文件详解

    ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式.内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码, ...

  8. 使用readelf分析一个elf文件完整结构

    编译器编译源代码后生成的文件叫目标文件: 从结构上来说与可执行文件一致,只是还没有经过动态链接的过程,有符号还没有被调整.与真正可执行文件稍有区别. 可执行文件格式涵盖了程序的编译.链接.装载和执行的 ...

  9. readelf和ldd分析elf文件

    1. elf 文件格式 linux系统中,gcc编译器编译出的object文件.可执行文件都属于elf文件. elf文件由三个部分组成:elf header.program headers|secti ...

最新文章

  1. mysql $区别_mysql 与oracle区别
  2. 《搜索引擎-信息检索实践》7.2.1 分类应用与检索/BM25检索模型
  3. [转]ESP8266使用详解
  4. makefile多目录的.c 格式.cpp混合编译
  5. Acwing第 27 场周赛【完结】
  6. AssetManager (资源路径+当前手机配置信息)
  7. 开发大会上,前微软CEO放出的狠话!.NET开发随时起飞,你准备好了吗?
  8. 图文详解mina框架
  9. 小鹏P5预售价公布:16-23万元 自动驾驶软件单独购买
  10. TMS320C55x的指令系统
  11. SQL ISNULL 函数
  12. oracle去除逗号函数,oracle逗号分隔函数
  13. php转换emoji表情为图片输出小程序,微信小程序中使用emoji表情相关
  14. 华尔街为何热捧优酷网?
  15. 边框虚线html代码是,网页虚线代码/表格边框虚线代码大全
  16. 【UI】优秀的网站欣赏以及分析
  17. Gvim开发环境配置笔记--Windows篇(转)
  18. Curator的基本使用
  19. 必看:重装操作系统的20条原则
  20. 求助FC上的一个c++代码实现丧心病狂的走迷宫小游戏!

热门文章

  1. 三国游戏(贪心算法)
  2. cpuz检测硬件真假_重磅!亚马逊首推智能眼镜和戒指,昨夜甩出15款硬件,Echo家族爆发...
  3. Python实现生命游戏(Game of Life)
  4. 50etf期权对冲策略怎么玩?
  5. SQL跟踪步骤--图文演示
  6. Java项目:局域网内实现中控(远程开关机)
  7. 外文文献看不懂——知云文献翻译神器送给你
  8. mysql官方示例employees数据导入
  9. 全网最详细软件测试基础知识,零基础自学的【建议收藏】
  10. 《安富莱嵌入式周报》第300期:几百种炫酷灯阵玩法, USB Web网页固件升级,波士顿动力整活,并联二极管问题,VisualStudio升级,STM32C0