objdump的使用

原创 2016年08月30日 00:26:42

一、objdump的使用

objdump是gcc工具,用来查看编译后目标文件的组成。
常用命令:
objdump -x obj:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库>
objdump -t obj:输出目标文件的符号表()
objdump -h obj:输出目标文件的所有段概括()
objdump -j ./text/.data -S obj:输出指定段的信息(反汇编源代码)
objdump -S obj:输出目标文件的符号表()  当gcc -g时打印更明显

objdump -j .text -Sl stack1 | more
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,
   效果比较明显。隐含了-d参数。
-l 用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用
  使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求
  编译时使用了-g之类的调试编译选项。
-j name 仅仅显示指定section的信息

这是按Section的名称列出的,其中跟动态连接有关的Section也出现在前面名为Dynamic的Segment中,只是在那里是按类型列出的。例如,前面类型为HASH的表项说与此有关的信息在0x8048128处,而这里则说有个名为.hash的Section,其起始地址为0x8048128。还有,前面类型为PLTGOT的表项说与此有关的信息在0x804a2c4处,这里则说有个名为.got的Section,其起始地址为0x804a2c4,不过Section表中提供的信息更加详细一些,有些信息则互相补充。在Section表中,只要类型为PROGBITS,就说明这个Section的内容都来自映像文件,反之类型为NOBITS就说明这个Section的内容并非来自映像文件。
跟区段头表中的信息一对照,就可以知道在第16项.data以前的所有区段都是要装入用户空间的。这里面包括了大家所熟知的.text即“代码段”。此外,.init、.fini两个区段也有着特殊的重要性,因为映像的程序入口就在.init段中,实际上在进入main()之前的代码都在这里。而从main()返回之后的代码,包括对exit()的调用,则在.fini中。还有一个区段.plt也十分重要,plt是“Procedure Linkage Table”的缩写,这就是用来为目标映像跟共享库建立动态连接的。
有些Section名是读者本来就知道的,例如.text、.data、.bss;有些则从它们的名称就可猜测出来,例如.symtab是符号表、.rodata是只读数据、还有.comment和.debug_info等等。还有一些可能就不知道了,这里择其要者先作些简略的介绍:

(1).hash。为便于根据函数/变量名找到有关的符号表项,需要对函数/变量名进行hash计算,并根据计算值建立hash队列。
● .dynsym。需要加以动态连接的符号表,类似于内核模块中的INPORT符号表。这是动态连接符号表的数据结构部分,须与.dynstr联用。
● .dynstr。动态连接符号表的字符串部分,与.dynsym联用。
● .rel.dyn。用于动态连接的重定位信息。
● .rel.plt。一个结构数组,其中的每个元素都代表着GOP表中的一个表项GOTn(见下)。
● .init。在进入main()之前执行的代码在这个Section中。
● .plt。“过程连接表(Procedure Linking Table)”,见后。
● .fini。从main()返回之后执行的代码在这个Section中,最后会调用exit()。
● .ctors。表示“Constructor”,是一个函数指针数组,这些函数需要在程序初始化阶段(进入main()之前,在.init中)加以调用。
● .dtors。表示“Distructor”,也是一个函数指针数组,这些函数需要在程序扫尾阶段(从main()返回之后,在.fini中)加以调用。
● .got。“全局位移表(Global Offset Table)”,见后。
● .strtab。与符号表有关的字符串都集中在这个Section中。



objdump反汇编用法示例

objdump反汇编,反汇编与源代码混合显示,C++符号逆向解析。
  • zoomdy
  • zoomdy
  • 2016年01月22日 18:49
  • 10581

objdump命令的使用

objdump命令的使用 objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: objdump...
  • beyondioi
  • beyondioi
  • 2012年07月28日 12:33
  • 69351

绝对强大的三个linux指令: ar, nm, objdump

前言 如果普通编程不需要了解这些东西,如果想精确控制你的对象文件的格式或者你想查看一下文件对象里的内容以便作出某种判断,刚你可以看一下下面的工具:objdump, nm, ar。当然,本文不可能非常...
  • princess9
  • princess9
  • 2011年09月17日 16:18
  • 12169

反汇编工具objdump的使用简介

《朱老师物联网大讲堂》学习笔记 学习网站:www.zhulaoshi.org objdump是我们进行反汇编的工具 还记得Makefile文件吗? led.bin: start.o  arm-...
  • qq_18973645
  • qq_18973645
  • 2016年03月27日 20:31
  • 2854

gcc命令objdump用法----反汇编

gcc命令objdump用法 gcc命令之 objdump ---------------objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具---------- 以下3条...
  • cwcwj3069
  • cwcwj3069
  • 2012年12月08日 18:07
  • 21273

objdump用法

objdump是个gcc的工具,用于解析二进制目标文件。 具体的用法可以man objdump查看。 下面简单介绍几个常用的用法,以kernel ko文件为例: -d 反汇编 ...
  • u014089131
  • u014089131
  • 2017年04月12日 17:28
  • 731

利用backtrace和objdump进行代码分析

http://blog.csdn.net/hanchaoman/article/details/5583457 利用backtrace和objdump进行分析:  重写的代码如下:  #in...
  • zzwdkxx
  • zzwdkxx
  • 2016年03月10日 16:34
  • 892

使用objdump查看动态库和静态库中具有哪些函数

我们在 Linux 下运行一个程序,有时会无法启动,报缺少某某库。这时需要查看可执行程序或者动态库中的符号表,动态库的依赖项, Linux 有现成的工具可用:objdump 。 objdump 是 g...
  • tao546377318
  • tao546377318
  • 2016年06月21日 15:32
  • 2080

Linux下objdump使用方法

linux下objdump命令常见用法举例: objdump -x obj:以某种分类信息的形式把目标文件的数据组成输出; objdump -t obj:输出目标文件的符号表() objdump -h...
  • freeplayer
  • freeplayer
  • 2015年04月19日 22:29
  • 3519

熟悉binutils工具集 — objdump

  • 2010年04月28日 13:18
  • 455KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:objdump的使用
举报原因:
原因补充:

(最多只允许输入30个字)