一看二做三总结
分类: LINUX
2011-06-06 23:04:50
0
作用Display information from object
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版的版本文件由于没有与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 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 @ @
不会用。
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选项的输出。