Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366375
  • 博文数量: 118
  • 博客积分: 3888
  • 博客等级: 中校
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-10 18:15
个人简介

一看二做三总结

文章分类

全部博文(118)

分类: LINUX

2011-06-06 23:04:50

 
本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net 

 

0   作用

Display information from object

1   格式

Usage: objdumpppc

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

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     @

  @                  Read options from

不会用。

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选项的输出。

 

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接,严禁用于任何商业用途。
作者:fireaxe_hq@hotmail.com
博客:fireaxe.blog.chinaunix.net 
阅读(9533) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~