转帖 objdump

Objdump入门 (2011-06-06 23:04)
标签:   objdump  分类:  编译链接

0   作用

Display information from object <file(s)>

1   格式

Usage: objdumpppc <option(s)> <file(s)>

2   参数说明  2.1    -f  显示文件格式

等价于 --file-headers 

debug 

dbg.o:     file format elf32-powerpc-vxworks

architecture: powerpc:common, flags 0x00000011:

HAS_RELOC, HAS_SYMS

start address 0x00000000

release

rls.o:     file format elf32-powerpc-vxworks

architecture: powerpc:common, flags 0x00000012:

EXEC_P, HAS_SYMS

start address 0x00100000

第一行显示的是文件格式。

第二行显示文件对应汇编文件的CPU架构。

第三行是对文件的一些说明:HAS_RELOC表明这个文件是一个重定向文件,而不是最终文件。HAS_SYMS表示有符号表存在。EXEC_P的含义不清楚。

第四行是目标文件中规定的代码段的起始位置。

2.2    -p  显示特殊的文件格式

等价于--private-headers

debug 

rls.o:     file format elf32-powerpc-vxworks

release

rls.o:     file format elf32-powerpc-vxworks

Program Header:

    LOAD off    0x00000060 vaddr 0x00100000 paddr 0x00100000 align 2**5

         filesz 0x00b87da0 memsz 0x0115e328 flags rwx

 

-p只用于elf文件。

typedef struct {

       Elf32_Word p_type;         /* PT_XXX */

       Elf32_Off    p_offset;

       Elf32_Addr p_vaddr;

       Elf32_Addr p_paddr;

       Elf32_Word p_filesz;

       Elf32_Word p_memsz;

       Elf32_Word p_flags; /* PF_XXX */

       Elf32_Word p_align;

} Elf32_Phdr;

2.3    -h 显示指定段头信息

等价于--[section-]headers 

Display the contents of the section headers

用于显示指定段的头部,如果不制定段,则显示所有段的头部。

Sections:

Idx Name          Size      VMA       LMA       File off  Algn

  0 .text         009e4540  00100000  00100000  00000060  2**4

                  CONTENTS, ALLOC, LOAD, CODE

  1 .init$00      000000    00ae4540  00ae4540  009e45a0  2**2

                  CONTENTS, ALLOC, LOAD, READONLY, CODE

  2 .init$99      00000010  00ae455c  00ae455c  009e45bc  2**0

                  CONTENTS, ALLOC, LOAD, READONLY, CODE

  3 .fini$00      0000001c  00ae456c  00ae456c  009e45cc  2**2

                  CONTENTS, ALLOC, LOAD, READONLY, CODE

  4 .fini$99      00000010  00ae4588  00ae4588  009e45e8  2**0

                  CONTENTS, ALLOC, LOAD, READONLY, CODE

  5 .sdata2       00000318  00ae4598  00ae4598  009e45f8  2**3

                  CONTENTS, ALLOC, LOAD, DATA

  6 .data         0019dfa0  00ae48c0  00ae48c0  009e4920  2**5

                  CONTENTS, ALLOC, LOAD, DATA

  7 .sdata        00000dd0  00c82860  00c82860  00b828c0  2**3

                  CONTENTS, ALLOC, LOAD, DATA

  8 .sbss         00001440  00c83630  00c83630  00b83690  2**3

                  ALLOC

  9 .bss          005d9a70  00c84a70  00c84a70  00b83690  2**4

                  ALLOC

 10 .bss._ZZN10dmsbHarqMs11notifyBurstEjjE7dbgUsed 00000004  0125e4e0 0125e4e0  00b83690  2**2

                  ALLOC

 11 .bss._ZZN10dmsbHarqMs11notifyBurstEjjE8dbgFrame 00000004  0125e4e4 0125e4e4  00b83690  2**2

                  ALLOC

 12 .debug_frame  00002400  00000000  00000000  00b83690  2**2

                  CONTENTS, READONLY, DEBUGGING

 

2.4    -x 显示所有的头信息

等价于--all-headers        Display the contents of all headers

-x显示的是-t-h所显示内容之和,此外还多了下面的这些内容,用于text段起始地址与程序头信息。

start address 0x00100000

Program Header:

    LOAD off    0x00000060 vaddr 0x00100000 paddr 0x00100000 align 2**5

         filesz 0x00b83630 memsz 0x0115e4e8 flags rwx

 

2.5    -d  反汇编代码段

等价于 --disassemble

-S的结果相同

2.6    -D  反汇编所有内容

等价于 --disassemble-all

反汇编所有段的内容,-d只反汇编代码段。

2.7    -S  反汇编代码段

等价于 --source

尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。

2.8    -s 16 进制显示各段的内容

等价于--full-contents 

显示section段完整内容,以16进制显示。

2.9    -W  显示 DWARF 信息

等价于--dwarf              Display DWARF info in the file

信息好像用处不大,看不懂

2.10      -t  显示符号表

等价于--syms               Display the contents of the symbol table(s)

显示文件中的符号列表。

2.11      -T  显示动态符号表

等价于--dynamic-syms       Display the contents of the dynamic symbol table

仅仅对动态目标文件有意义动态。符号目前没有,不知道是不是加入静态函数符号后会有用。

2.12      -r  显示可重定向信息

等价于--reloc              Display the relocation entries in the file

显示可重定向符号表,只在目标文件中存在,elf文件中不会有。debug版的版本文件由于没有与bspvxworks链接,因此也存在大量的可重定向符号。

进行的操作

结果

源码:

最简单的函数调用

void test(void)

{}

void test2(void)

{

  test();

}

ccppc -c test.c

objdump -d test.o:

bl本来应该跳转到函数test,但由于该文件还没有链接,因此只是调转到下一行。

lwz     r3,8(r31)

bl      48 <test2+0x1c>

mr      r0,r3

objdumpppc -r:

-r命令可以打出重定向符号。可以看到0x48处有个符号需要重定向。文件链接时,会用test的地址代替0x48处的跳转地址。

test.o:     file format elf32-powerpc-vxworks

RELOCATION RECORDS FOR [.text]:

OFFSET   TYPE              VALUE

00000048 R_PPC_REL24       test

注意:从上面的结果看,-c生成的.o文件应该是不能执行的,但实际情况是如果把.o文件下载到目标机后是可以执行的。原因是vxowrks在目标机上驻留的代理进程能够完成重定向的工作。

2.13      @

  @<file>                  Read options from <file>

不会用。

2.14      -v  显示 Objdump 工具的版本信息

等价于--version            Display this program's version number

DebugRelease

GNU objdump (Wind River VxWorks G++ 4.1-82) 2.17.50.20070509

Copyright 2007 Free Software Foundation, Inc.

This program is free software; you may redistribute it under the terms of

the GNU General Public License.  This program has absolutely no warranty.

显示的Gcc程序的版本信息

2.15      -I  显示 Objdump 工具支持的文件格式

等价于 --info               List object formats and architectures supported

显示Objdumpppc所支持的目标文件格式。

2.16      -l  反汇编时输出行号与文件名

等价于 --line-numbers             Include line numbers and filenames in output

输出是包含行号与文件名。debug版才能输出文件名与行号,release版由于本身就不含有这些信息,所以无法输出文件名与行号。这是一种比较老的反汇编格式。显示效果并不理想,但可能会用到其中的某些显示,自己可以对比

2.17      --adjust-vma=offset  调整可重定向符号的其实地址

可以调整可重定向符号的起始地址,方便用户查看。但对已经链接完成的目标文件无效。因此用处很小。

2.18      -C C 语言格式反汇编

等价于 --demangle

该参数用于将底层的符号名解码成用户级名字,除了去掉所有开头的下划线之外,还使得C++函数名以可理解的方式显示出来。从下表可以看出明显的区别。

源码

class T1

{

public:

    int T1Test();

};

未加-C

01800054 g     F .text  00000028 _ZN2T15T1TetsEv

加上-C

01800054 g     F .text  00000028 T1::T1Test()

 

2.19      指定起始地址

--start-address=address

    从指定地址开始显示数据,该选项影响-d-r-s选项的输出。

--stop-address=address

    显示数据直到指定地址为止,该选项影响-d-r-s选项的输出。

 

 

版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值