objdump与readelf
objdump和readelf都可以用来查看二进制文件的一些内部信息. 区别在于objdump
借助BFD而更加通用一些, 可以应付不同文件格式, readelf则并不借助BFD,
而是直接读取ELF格式文件的信息, 按readelf手册页上所说, 得到的信息也略细致一些.
几个功能对比.
1. 反汇编代码
查看源代码被翻译成的汇编代码, 大概有3种方法,
1) 通过编译器直接从源文件生成, 如gcc -S 文件
2) 对目标代码反汇编, 一种是静态反汇编, 就是使用objdump -d 文件
3) 另外一种就是对运行时的代码反汇编, 一般通过gdb
readelf并不提供反汇编功能.
objdump可以指定反汇编哪个节, 一般只有对包含指令的节反汇编才有意义. 而对于一些
其他的类型的节, objdump也可以将特殊节的数据以解析后的形式呈现出来
2. 显示relocation节的条目
-r参数显示elf文件的类型为REL的节的信息, 使用-S参数可以列出elf文件的
所有节的信息, 其中也就包括了REL节.
对于可重定位文件两者显示条目一致, 最重要的offset和type以及Sym.Name都有.
#readelf -r XXX.o
#objdump -r XXX.o
readelf的显示分节, 而objdump则将两个节合在一起. readelf的
显示更加清晰一些.
3. 显示动态重定位条目(或者可以认为是动态链接相关的重定位条目)
(按objdump的man page说明, 只对dynamic object有效, 如某些类型的共享库)
readelf和objdump等价的命令为readelf -D -r file和objdump -R file.
对readelf使用-r和-D -r的区别, 对于共享库在于数据的呈现方式略有不同. 这两种
都将数据解析后呈现出来. 前者显示的是相对于基地址的偏移, 后者则显示绝对偏移量.
前者显示条目数, 后者显示字节数.
另外有必要说明的是如果对可重定位文件(.o文件)应用这两个命令是无效的.
4. 显示节信息: readelf -S和objdump -h
对于可重定位文件, objdump -h不能显示.rel开头的节和.shstrtab, .symtab, .strtab.
而readelf的显示有一个.group节, 其内容为节的group, 可以用-g参数查看.
对于共享库, objdump -h仍然不能显示.shstrtab, .symtab, .strtab三个节, 另外还有
一个区别在于readelf从一个NULL类型的节开始, 而objdump的输出去掉了这个空的节.
5. 显示.dynamic节信息
只readelf -d有对应的功能, objdump没有. 另外需要注意, 看重定位文件不需要动态
链接(加载), 所以没有.dynamic节.
6. 显示程序段信息
第二个readelf支持而objdump没有的功能. 命令参数为readelf -l.
同样, 对于可重定位文件而言没有段. 这一点也可以从ELF头中看到, 命令为readelf -h.
7. 以字节(HEX或字符)形式dump某节的内容
readelf -x <secname>
objdump -s
后者默认一次dump所有节的内容. 如果只想dump某节的内容, 则用-j <secname>
参数指定. readelf一次只能dump某一节的内容.
8. 查看ELF程序头信息
readelf -h提供完整的信息, objdump -f只提供很少的信息.
9. 查看符号信息
readelf -s
objdump -t
两个命令都提供类似nm的信息.
注意readelf同时显示了.dynsym的信息, 而objdump实际上只显示了.symtab部分的信息.
如果需要显示动态部分的符号, 使用-T参数.
对readelf同时使用-D -s参数无效. 对照手册页说明也没弄清楚-D的主要用途,
在这里可能因为-s已经能够都显示了.
10. 一次全部
两个命令都提供了一个参数, 指定多个其他参数的集合一起显示, 但显示内容略有不同.
readelf -a: -h -l -S -r -s -d -n -V
objdump -x: -a -f -h -p -r -t
扩展阅读:
readelf和ldd分析elf文件
objdump查看目标文件构成
参考:
http://www.newsmth.net/pc/pccon.php?id=10001977&nid=316530
objdump与readelf相关推荐
- Linux ——objdump和readelf的使用
在一个程序编译结束后,会生成****.o的文件,但往往当我们用vim命令查看这个文件内容时,就全是乱码, 像这样: 那么我们应该如何查看***.o文件呢? objdump和readelf的使用 obj ...
- Android objdump/nm/readelf使用
1.objdump:查看反汇编so/bin为arm汇编 # aarch64-linux-android-objdump -a -S libtest.so2. readelf:读取linux系统ELF格 ...
- Linux 下nm 、objdump 和 readelf 比较
ELF (Executable and Linkable Format) 是 Linux 和 Unix-like 系统上可执行文件.库文件.共享文件等的标准格式.它具有以下几个特征: 多平台支持:EL ...
- objdump and readelf
编译器 arm-linux-gcc arm-linux-gcc hello.c -o hello 反汇编器 arm-linux-objdump arm-linux-objdump -D -S hell ...
- 段错误需要使用的工具 nm objdump readelf
nm:列出目标文件中的符号. objdump:显示目标文件中的详细信息. readelf:显示关于 ELF 目标文件的信息. 具体的readelf命令可以查看 列表中的第一个工具是 nm,它可以列出目 ...
- 二进制实用程序(objdump, readelf,ar, nm等)
二进制实用程序(objdump, readelf,ar, nm等) GNU 二进制实用程序Binutils (GNU binary utilities)包括:objdump.readelf.addr2 ...
- linux进程 exe可执行文件空,linux可执行文件的内容分析工具nm objdump readelf ar ldd
转自:http://blog.csdn.net/eroswang/article/details/1967243 UNIX(R) 系统中运行的程序遵守一种称为目标文件格式的精心设计.了解更多关于目标文 ...
- java 抽象方法 虚方法的区别_声明抽象类(纯虚方法)会大幅增加二进制大小
以下是故事:我正在使用AC6 Toolpack为Linux中的ARM Cortex-M0处理器开发C软件 . 在我使用Keil(在windows中)(拥有自己的工具链)之前,我已经迁移到GNU-too ...
- 从hello world 说程序运行机制
http://www.cnblogs.com/yanlingyin/archive/2012/03/05/2379199.html 开篇 学习任何一门编程语言,都会从hello world 开始.对于 ...
最新文章
- 关于不能成为专业软件测试人员的10大理由的一些阐述
- 简单js特效代码大全_Django 功法大全
- 删除控制_别了 Flash!Win10已全面删除:已从控制面板和安装文件中消失
- adding oracle jvm 慢,java – 什么JVM优化导致这些性能结果?
- linux中sort命令
- LeetCode-基础动态规划-70. 爬楼梯
- 项目范围管理:项目范围管理的概念
- 谷歌40人发表59页长文:为何真实场景中ML模型表现不好?
- sql注入pythonpoco_.NET EF(Entity Framework)详解
- 转载:用大白话聊聊分布式系统
- 如何用两个开关控制同一盏灯
- android tag 快捷_Android Studio快捷键使用
- 求书:推荐阅读倡议书
- C#调用GDI+1.1中的函数实现高斯模糊、USM锐化等经典效果。
- 网络继电器的EPICS IOC搭建
- Java中判断String不为空的问题性能比较
- Qt信号和槽机制详解
- 实现div半透明效果
- lisp方格网法计算土方量_CAD计算土方方量插件
- 信息安全 —— 密码学
热门文章
- javascript如何实现功能的分析
- 基于FPGA系统合成两条视频流实现3D视频效果
- OpenCV 错误:无法打开摄像头(打开摄像头卡机)
- java与3d建模_3d建模加载,更新和在java中呈现
- const int * 、int * const、int const* 、const int a(){ } 和int a()const { }的区别和联系
- 设置VSCode打开键盘快捷方式和键盘快捷方式配置JSON分别快捷键为:Ctrl+Alt+K和Shift+Alt+K
- 自定义国内maven镜像包设置settings.xml
- 在Ubuntu 14.04 64bit上搭建单机本地节点Spark 1.3.0环境
- Python爬虫入门教程 54-100 博客园等博客网站自动评论器
- GreenPlum学习笔记:基础知识