gcc命令之objdump

—————objdump是用查看目标文件或则可执行的目标文件的构成的GCC工具———-

以下3条命令足够这些喜欢探求目标文件与源代码之间的丝丝的关系的同事。

objdump-xobj以某种分类信息的方式把目标文件的数据组织(被分为几大块)输出

objdump-tobj输出目标文件的符号表()

objdump-hobj输出目标文件的所有段概括()

objdump-j.text/.data-Sobj输出指定段的信息,大约就是反汇编源代码把

objdump-SobjC语言与汇编语言同时显示

objdump和readelf都可以拿来查看二补码文件的一些内部信息.区别在于objdump

利用BFD而愈发通用一些,可以应付不同文件格式,readelf则并不依靠BFD,

而是直接读取ELF格式文件的信息,按readelf指南页上所说,得到的信息也略细致一些.

几个功能对比.

1.反汇编代码

查看源代码被翻译成的汇编代码,大约有3种方式,

1)通过编译器直接从源文件生成,如gcc-S

2)对目标代码反汇编,一种是静态反汇编,就是使用objdump

3)另外一种就是对运行时的代码反汇编,通常通过gdb

readelf并不提供反汇编功能.

nm命令还是比较简单但是强悍的。它拿来列举一个目标文件中的各类符号。符号的种类好多,以下是一些常见的符号类型nm输出字符涵义RReadonlysymbol.诸如在代码中有一个constMAXDATA=3095;则MAXDATA就是一个ReadonlysymbolN这是一个调试符号D这是一个早已初始化的变量的符号。例如代码中inti=1和char*str=”Hello”则i和str都是这种类型的符号TText段的符号。子程序都是这些符号,例如文件中实现了一个函数functionlinux防火墙设置linux操作系统好吗,则function就是这些符号U未定义的符号。假如文件中引用了不存在的函数,则这种未定义的函数符号就是这种类型S未初始化的符号,例如全局变量ints;则s的符号就是这种型nm命令的详尽用法以及事例见正文。先来事例,以下是a.c的内容:

ldd命令

该命令用于判定某个可执行的binary档案富含哪些动态函式库。

[root@testroot]#ldd[-vdr][filename]

参数说明:

--version复印ldd的版本号

-v--verbose复印所有信息,比如包括符号的版本信息

-d--data-relocs执行符号重布署,并报告缺乏的目标对象(只对ELF格式适用)

linux命令大全网站_linux命令大全chm版_linux命令行大全怎么样

-r--function-relocs对目标对象和函数执行重新布署,并报告缺乏的目标对象和函数(只对ELF格式适用)

--help用法信息

假如命令行中给定的库名子包含’/’,这个程序的libc5版本将使用它作为库名子;否则它将在标准位置搜索库。运行一个当前目录下的共享库,加前缀”./”。

错误:

ldd不能在a.out格式的共享库上。

ldd不能工作在一些特别老的a.out程序上linux命令大全网站,这种程序在支持ldd的编译器发行前早已创建。假如你在这种类型的程序上使用ldd,程序将尝试argc=0的运行方法linux命令大全网站,其结果不可预知。

比如:

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复