binutils工具集之---objdump

在嵌入式软件开发中,有时需要知道所生成的程序文件中的段信息以分析问题,或者需要查看c语言对应的汇编代码,此时,objdump工具就可以帮大忙了。obj——object  dump:转储。

#include<stdio.h>
#include<time.h>

int global1;
int global2=3;

static int static_global1;
static int static_global2=3;

void foo()
{
        static int internal1;
        static int internal2=3;
         time(0);
}

static void bar()
{

}
  int main(void)
{
        int local1;
        int local2=3;
        foo();
        return 0;
}

采用 -d选项,可以查看程序文件的汇编代码:

在使用-d进行反汇编时,另一个很有用的选项就是-S(大写),它的作用是告诉objdump在反汇编时同时显示汇编代码对应的c/c++源程序。

想查看对应反汇编,一定要在编译的时候加上-g选项生成debug信息,否则不会成功:

-f选项可以显示程序文件的头信息。

objdump另一个非常有用的选项是-s(小写),将它与-j参数配合使用,能查看某一个段中的具体内容。

更多指令参考man或者info介绍:

-s
--full-contents
Display the full contents of any sections requested. By default
all non-empty sections are displayed.

-S
--source
Display source code intermixed with disassembly, if possible.//这下知道为什么刚才说的要加上-g生成调试信息了把,-S并不是强制显示程序文件,而是
Implies -d.                                                                                //在可能的情况下,进行显示,所以要想可能,就加上-g生成调试信息。

-d
--disassemble
Display the assembler mnemonics for the machine instructions from
objfile. This option only disassembles those sections which are
expected to contain instructions.

-D
--disassemble-all
Like -d, but disassemble the contents of all sections, not just
those expected to contain instructions.

This option also has a subtle effect on the disassembly of
instructions in code sections. When option -d is in effect objdump
will assume that any symbols present in a code section occur on the
boundary between instructions and it will refuse to disassemble
across such a boundary. When option -D is in effect however this
assumption is supressed. This means that it is possible for the
output of -d and -D to differ if, for example, data is stored in
code sections.

If the target is an ARM architecture this switch also has the
effect of forcing the disassembler to decode pieces of data found
in code sections as if they were instructions.

时间: 2024-10-28 22:11:38

binutils工具集之---objdump的相关文章

binutils工具集之---addr2line

addr2line用于得到程序指令地址所对应的函数,以及函数所在的源文件名和行号. 在不少嵌入式开发环境中,编译器的名称往往不是gcc,而是想arm-rtems-gcc这样的,对于这种命名形式的编译器,读者通常可以找到arm-rtems-addr2line ,arm-rtems-objdump等相应名称的工具,这是GNU工具集的一种命名惯例. 本文并不是binutils工具集的完整参考手册,当需要得到更为详细的帮助信息时,可以参照对应工具的man和info信息.另一个更为简单的方法时运行相应的工

Makefile 学习&amp;binutils工具集,软件开发利器

gcc -E 能有效的帮助我们解决与宏有关的编译错误: gcc -S能获得一个C源程序文件的汇编程序: gcc -v能获得系统头文件的路径 生成依赖关系: gcc -M gcc -MM 生成不包含系统头文件的依赖关系 指定链接库: gcc -L:告诉gcc可以从哪个目录查找库文件: gcc -l :用于告诉gcc在生成可执行程序时需要链接的库名: 一.静态库生成步骤如下:步骤一:生成 str_out.o 目标文件gcc -c str_out.c注:不加 -o 则生成同名的 *.o 目标文件(st

binutils工具集,软件开发利器

在binutils工具集中,以下工具是我们在做嵌入式软件开发时需要掌握的: as是汇编编译器,用于将汇编代码转换为目标文件. add2line用户得到程序指令地址所对应的函数,以及函数所在的源文件名和函号: ar用于创建和修改档案文件,以及从档案文件中抽取文件.静态库(.a文件)就是一种档案文件,需要用它生成和管理: ld:链接器: nm:用于列出程序文件中的符号及符号在内存中的(开始)地址:符号包含C程序中的函数名和变量名: objcopy:用于用来从程序文件中拷贝出我们所指定的段.代码格式转

binutils工具集之---objcopy,ranlib,size

objcopy的作用是拷贝一个目标文件的内容到另一个目标文件中.objcopy使用GNU BFD库去读或写目标文件.objcopy可以使用不同于源目标文件的格式来写目的目标文件(也即是说可以将一种格式的目标文件转换成另一种格式的目标文件).objcopy在进行目标文件的转换时,将生成一个临时文件,转换完成后就将这个临时文件删掉.objcopy使用BFD做转换工作.如果没有明确地格式要求,则objcopy将访问所有在BFD库中已经描述了的并且它可以识别的格式. 这里只介绍arm开发板中可能会用到的

binutils工具集之---ar

1.如果要将多个.o文件生成一个库文件,则存在两种类型的库,在linux里面后缀是.a,另一种是动态库,后缀为.so. 当可执行程序要与静态库进行链接时,所用到的库中的函数和数据会被拷贝到最终的可执行程序中.而采用动态库则不会,程序加载器在后台为我们讲所需的动态库自动加载到内存中且保证整个系统只有一份拷贝. 如果一个系统中存在多个需要同时运行的程序且这些程序之间存在共享库,那么采用动态库的形式将更节省内存.但是对于嵌入式系统,大多数情况下都是整个软件就是一个可执行程序且不支持动态加载的方式,即以

Linux开发工具集

最近工作学了不少linux下的新东西,下面这些工具主要针对c/c++,以后慢慢补充一些好用的工具. 编辑器 vim emacs kate(KDE下一个功能强大的编辑器) IDE(集成开发环境) eclipse+cdt clion qt cteator 编译器 gcc g++ clang 调试器 gdb 构建工具 cmake make 内存工具 Purify Valgrind工具集 KCachegrind 剖析工具 gprof开源剖析工具,通常作为gcc编译器的一部分. Quantify是IBM的

IBM Rational-完整的软件工程解决方案工具集

IBM,即国际商业机器公司,1911年创立于美国,是全球最大的信息技术和业务解决方案公司,其业务遍及全球170多个国家和地区.IBM软件分为五个部分,其中Rational系列是专门针对软件工程的软件工具系列.IBM提供业内最佳工具集,使整个软件开发生命周期管理自动化并支持最佳实践.IBM Rational系列不但有工具的支持,更有理论方法的支持,通过优化开发过程的每个阶段,IBM的工具充分提高数据透明度.协同工作和验证能力,确保客户更快.更好地开发出软件和系统. 产品介绍 1. IBM Rati

解决 vs2010问题 error MSB8008: 指定的平台工具集(v110)未安装或无效

在VC++编译程序时,出现如下图所示的问题: >------ 已启动生成: 项目: PhotoStore, 配置: Debug Win32 ------ 1>生成启动时间为 2013-01-15 18:10:34. 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: 指定的平台工具集(v110)未安装或无效.请确保选

工具集

好用的工具集 转:http://www.yimingzhi.com/2015/03/lao-yi-de-kai-fa-gong-ju-he-lei-ku-ji-2014-ban Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio下的,老版本可以根据名字自行查找安装. CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实