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
相关文章:

接口学习笔记(2009.11.24)
了解接口,主要是为了一道经典面试题:接口与抽象类的区别,对接口的理解却很少,现在学习一下。 接口只包含方法、属性、事件或索引器的签名。成员的实现是在实现接口的类或结构中完成的。 Interfacenamespace study1124{ interfa…
“一网打尽”Deepfake等换脸图像,微软提出升级版鉴别技术Face X-Ray
作者 | Just出品 | AI科技大本营(ID:rgznai100)Deepfake换脸图像的泛滥给人类社会带来了巨大的挑战。虽然研究者们为检测换脸图片提出了多种AI鉴别算法,但随着换脸算法的不断改造升级,鉴别算法很难跟上换脸算法的变化。微软亚洲研…

双边滤波算法的简易实现bilateralFilter
没怎么看过双边滤波的具体思路,动手写一写,看看能不能突破一下。 最后,感觉算法还是要分开 水平 与 垂直 方向进行分别处理,才能把速度提上去。 没耐性写下去了,发上来,给大伙做个参考好了。 先上几张效果图…
赔偿谷歌1.8亿美元!前Uber自动驾驶主管被告到破产
整理 | Just出品 | AI科技大本营(ID:rgznai100)两年前的Google自动驾驶部门与Uber自动驾驶技术纠纷案以和解结束后再起波澜。据路透社等外媒报道,Uber自动驾驶部门前主管安东尼莱万多夫斯基(Anthony Levandowski)周三申…

.data和.text段合并
a.c #include <stdio.h> extern int share;int main(void) { int a100;swap(&a,&share);} b.c int share1;void swap(int *a,int *b){*a^*b^*a^*b;} 编译 #gcc -c a.c b.c 链接 #ld a.o b.o -e main -o ab 查看 #objdump -h 文件 VMA即虚拟地址 size即…

用QQ提问的技巧,用了之后可以提高效率,呵呵。
有些Tx喜欢用QQ向好友提些问题,但是却没有掌握提问的技巧,自己没有及时得到答案也浪费了对方的时间。这里抛砖引玉,说一下我的看法和体会。大家一起讨论。我们讨论问题,不讨论人。 一、 把QQ当成了电话(不适合的做法&a…
Android重绘ListView高度
Android重绘ListView高度 经常会有这样需求,需要ListView默认将所有的条目显示出来,这就需要外层使用ScrollView,ScrollView里面放置一个重绘高度的ListView,类似下面这样 工具类 package ……;import android.view.View; import …

C语言数据类型所占空间大小
C语言数据类型所占空间大小 /** datasize.c -- print the size of common data items* This runs with any Linux kernel (not any Unix, because of <linux/types.h>)** Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet* Copyright (C) 2001 OReilly & A…

SharePoint基础之六- SharePoint基础架构中涉及的ASP.NET架构
ASP.NET框架代表着在IIS和ISAPI编程模型之上的一个重要的生产力层. 如果你熟悉ASP.NET开发的话, 你就会知道它为你的应用程序逻辑编写托管代码提供了便利, 比如说C#, VB.NET, 并且允许你在由Microsoft Visual Studio提供的面向生产力的可视化编辑器中工作. ASP.NET框架还提供了…
Javascript函数之深入浅出递归思想,附案例与代码!
作者 | 浮世万千吾爱有三责编 | Carol来源 | CSDN 博客递归函数的理解1、生活中的递归“递归”在生活中的一个典例就是“问路”。如图小哥哥进入电影院后找不到自己的座位,问身边的小姐姐“这是第几排”,小姐姐也不清楚便依次向前询问,问至第…

Linux指令--文件和目录属性
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面我们就开始了解一下linux目录结构的…

Linux内存寻址
一.内存地址分类以及MMU介绍 对于程序员来说,可以简单的把内存地址理解为一种访问存储单元的内容的一种方式。而对于80x86系列微处理器来说,我们需要区分三种地址: (1)逻辑地址 这种地址通常使用在机器语言里用于指…

iptables 基本命令使用举例
原文地址:http://www.linuxsky.org/doc/admin/200803/262.html 一、链的基本操作 1、清除所有的规则。 1)清除预设表filter中所有规则链中的规则。 # iptables -F 2)清除预设表filter中使用者自定链中的规则。 #iptables -X #iptables -Z 2、…
重磅!教育部再次审批179所高校新增本科AI专业
整理&责编 | 夕颜出品 | CSDN(ID:CSDNnews)好消息!2 月 21 日,教育部官网发布了《教育部关于公布 2019 年度普通高等学校本科专业备案和审批结果的通知》,公开了 2019 年度普通高等学校本科专业备案和审批结果。17…
Qt之自定义搜索框
简述 关于搜索框,大家都经常接触。例如:浏览器搜索、Windows资源管理器搜索等。 当然,这些对于Qt实现来说毫无压力,只要思路清晰,分分钟搞定。 简述效果细节分析Coding源码下载效果 细节分析 实现细节需要如下步骤&…

大型网站架构演变和知识体系
存爱好,作为收藏,原地址:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html,同时向原创致敬之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的&#…
Python数据清理终极指南(2020版)
作者 | Lianne & Justin译者 | 陆离出品 | AI科技大本营(ID:rgznai100)一般来说,我们在拟合一个机器学习模型或是统计模型之前,总是要进行数据清理的工作。因为没有一个模型能用一些杂乱无章的数据来产生对项目有意义的结果。…
内存地址转换与分段
原文标题:Memory Translation and Segmentation 原文地址:http://duartes.org/gustavo/blog/ 翻译地址:http://blog.csdn.net/drshenlei/article/details/4261909 本文是Intel兼容计算机(x86)的内存与保护系列文章的第…

c++ 普通高精减
//c 普通高精减 //codevs 3115 高精度练习之减法 //内容简单,就不注释了。 //注意下,&&优先级高于||。 #include<cstdio>#include<cstring>char s1[600],s2[600];int a1[600],a2[600],len1,len2,i;int main(){scanf("%s",…
腾讯提超强少样本目标检测算法,公开1000类检测训练集FSOD | CVPR 2020
作者 | VincentLee来源 | 晓飞的算法工程笔记不同于正常的目标检测任务,few-show目标检测任务需要通过几张新目标类别的图片在测试集中找出所有对应的前景。为了处理好这个任务,论文主要有两个贡献:提出一个通用的few-show目标检测算法&#…

Linux加入到Windows域 收藏
一、实验环境: AD server:windows server 2003samba:redhat as5AD server的hostname和IP地址:turbomai-c<?xml:namespace prefix st1 ns "urn:schemas-microsoft-com:office:smarttags" />89f91.test.com 192…
哈希函数原理及实现
哈希解决冲突 1000以内的素数 一般的hash实现已经总结出一些比较重要的素数: static unsigned int table_size[] {7,13,31, 61, 127, 251, 509, 1021,2039, 4093, 8191, 16381, 32749, 65521,1310…
基于Virtual DOM与Diff DOM的测试代码生成
尽管是在年末,并且也还没把书翻译完,也还没写完书的第一稿。但是,我还是觉得这是一个非常不错的话题——测试代码生成。当我们在写一些UI测试的时候,我们总需要到浏览器去看一下一些DOM的变化。比如,我们点击了某个下拉…

Win32 环境下的堆栈
原文已经找不到,作者应该是:http://blog.csdn.net/slimak 但是没有找到此文,其中丢了2幅图 简介 在Win32环境下利用调试器调试应用程序的时候经常要和堆栈(Stack)打交道,尤其是在需要手工遍历堆栈(Manually Walking Stack)的时候我们需要…

在VMWare中配置SQLServer2005集群 Step by Step(四)——集群安装
在VMWare 中配置集群 1. 进入command 命令窗口执行以下命令,创建仲裁磁盘和共享数据磁盘 vmware-vdiskmanager.exe -c -s 200Mb -a lsilogic -t 2 F:\VM\Share\Windows\SQLServer\quorum.vmdk vmware-vdiskmanager.exe -c -s 4Gb -a lsilogic -t 2 F:\VM\Share\Wind…
口罩检测识别率惊人,这个Python项目开源了
作者 | 一颗小树x,CSDN 博主编辑 | 唐小引来源 | CSDN 博客昨天在 GitHub 上看到一个有趣的开源项目,它能检测我们是否有戴口罩,跑起程序测试后,发现识别率挺高的,也适应不同环境,于是分享给大家。首先感谢…

CentOS搭建msmtp+mutt实现邮件发送
1:搭建配置msmtp下载msmtp包:官方地址:http://msmtp.sourceforge.net/download.html编译,安装(官方下载的包为tar.xz格式):#xz -d msmtp-1.6.3.tar.xz #tar -xvf msmtp-1.6.3.tar #cd msmtp-1.6.3 #./configure --prefix /opt/app…
Linux环境下的堆栈--调试C程序
完整的调试过程,跟踪堆栈变化,32位下。 注意64位和此不同。 a.c代码: #include <stdio.h> int main() { AFunc(5,6);return 0; } int BFunc(int i,int j) {int m 1;int n 2;m i;n j; return m; }int AFunc(int i,int j) {…
听说过代码洁癖,Bug洁癖怎么解?
来源 | Python编程时光(ID: Cool-Python)当我们写的一个脚本或程序发生各种不可预知的异常时,如果我们没有进行捕获处理的时候,通常都会致使程序崩溃退出,并且会在终端打印出一堆 密密麻麻 的 traceback 堆栈信息来告诉…

POJO、VO、PO、FormBean区别:
首先讲一下四者的概念 POJO:Pure Old Java Object,符合Java Bean属性规范的简单Java对象,通常也称为VO(Value Object,值对象)。 VO:就是POJO; PO: Persistent Object,持久化对…