天空小小岛技术论坛

 找回密码
 注册
搜索
查看: 2080|回复: 0
打印 上一主题 下一主题

Objdump

[复制链接]
跳转到指定楼层
1#
s.Bo 发表于 2015-1-9 10:26:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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版的版本文件由于没有与bsp的vxworks链接,因此也存在大量的可重定向符号。
进行的操作
结果
源码:
最简单的函数调用
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
Debug与Release
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选项的输出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|天空小小岛  |京ICP备2025130156号|

GMT+8, 2025-6-22 04:07 , Processed in 0.099981 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表