objdump -j .text -S wbxtahoeas.2.8.2-40 > tahoe2.8.2-40.txt
---------------objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具----------
以下3条命令足够那些喜欢探索目标文件与源代码之间的丝丝的关系的朋友。
objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出 <可查到该文件的所有动态库>
objdump -t obj 输出目标文件的符号表()
objdump -h obj 输出目标文件的所有段概括()
objdump -j .text/.data -S obj 输出指定段的信息,大概就是反汇编源代码把
objdump -S obj C语言与汇编语言同时显示
以下为网上摘录文章。
关于nm -s的显示请自己man nm查看
objdump命令的man手册
objdump - 显示二进制文件信息
objdump
[-a] [-b bfdname |
--target=bfdname] [-C] [--debugging]
[-d] [-D]
[--disassemble-zeroes]
[-EB|-EL|--endian={big|little}] [-f]
[-h] [-i|--info]
[-j section | --section=section]
[-l] [-m machine ] [--prefix-addresses]
[-r] [-R]
[-s|--full-contents] [-S|--source]
[--[no-]show-raw-insn] [--stabs] [-t]
[-T] [-x]
[--start-address=address] [--stop-address=address]
[--adjust-vma=offset] [--version] [--help]
objfile...
--archive-headers
-a 显示档案库的成员信息,与 ar tv 类似
objdump -a libpcap.a
和 ar -tv libpcap.a 显示结果比较比较显然这个选项没有什么意思。
--adjust-vma=offset
When dumping information, first add offset to all
the section addresses. This is useful if the sec-
tion addresses do not correspond to the symbol
table, which can happen when putting sections at
particular addresses when using a format which can
not represent section addresses, such as a.out.
-b bfdname
--target=bfdname
指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如:objdump -b oasys -m vax -h fu.o
显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表
--demangle
-C 将底层的符号名解码成用户级名字,除了去掉所有开头的下划线之外,还使得C++函数名以可理解的方式显示出来。
--debugging
显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。
--disassemble
-d 反汇编那些应该还有指令机器码的section
--disassemble-all
-D 与 -d 类似,但反汇编所有section
--prefix-addresses
反汇编的时候,显示每一行的完整地址。这是一种比较老的反汇编格式。
显示效果并不理想,但可能会用到其中的某些显示,自己可以对比。
--disassemble-zeroes
一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。
-EB
-EL
--endian={big|little}
这个选项将影响反汇编出来的指令。
little-endian就是我们当年在dos下玩汇编的时候常说的高位在高地址,x86都是这种。
--file-headers
-f 显示objfile中每个文件的整体头部摘要信息。
--section-headers
--headers
-h 显示目标文件各个section的头部摘要信息。
--help 简短的帮助信息。
--info
-i 显示对于 -b 或者 -m 选项可用的架构和目标格式列表。
--section=name
-j name 仅仅显示指定section的信息
--line-numbers
-l 用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。
--architecture=machine
-m machine
指定反汇编目标文件时使用的架构,当待反汇编文件本身没有描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构
--reloc
-r 显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。
--dynamic-reloc
-R 显示文件的动态重定位入口,仅仅对于动态目标文件有意义,比如某些共享库。
--full-contents
-s 显示指定section的完整内容。
objdump --section=.text -s inet.o | more
--source
-S 尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。
--show-raw-insn
反汇编的时候,显示每条汇编指令对应的机器码,除非指定了
--prefix-addresses,这将是缺省选项。
--no-show-raw-insn
反汇编时,不显示汇编指令的机器码,这是指定 --prefix-addresses
选项时的缺省设置。
--stabs
Display the contents of the .stab, .stab.index, and
.stab.excl sections from an ELF file. This is only
useful on systems (such as Solaris 2.0) in which
.stab debugging symbol-table entries are carried in
an ELF section. In most other file formats, debug-
ging symbol-table entries are interleaved with
linkage symbols, and are visible in the --syms output.
--start-address=address
从指定地址开始显示数据,该选项影响-d、-r和-s选项的输出。
--stop-address=address
显示数据直到指定地址为止,该选项影响-d、-r和-s选项的输出。
--syms
-t 显示文件的符号表入口。类似于nm -s提供的信息
--dynamic-syms
-T 显示文件的动态符号表入口,仅仅对动态目标文件有意义,比如某些共享库。它显示的信息类似于 nm -D|--dynamic 显示的信息。
--version 版本信息
objdump --version
--all-headers
-x 显示所有可用的头信息,包括符号表、重定位入口。-x 等价于
-a -f -h -r -t 同时指定。
objdump -x inet.o
参看 nm(1)
★ objdump应用举例(待增加)
/*
g++ -g -Wstrict-prototypes -Wall -Wunused -o objtest objtest.c
*/
#include
#include
int main ( int argc, char * argv[] )
{
execl( "/bin/sh", "/bin/sh", "-i", 0 );
return 0;
}
g++ -g -Wstrict-prototypes -Wall -Wunused -o objtest objtest.c
objdump -j .text -Sl objtest | more
/main(查找)
08048750:
main():
/home/scz/src/objtest.c:7
*/
#include
#include
int main ( int argc, char * argv[] )
{
8048750: 55 pushl %ebp
8048751: 89 e5 movl %esp,%ebp
/home/scz/src/objtest.c:8
execl( "/bin/sh", "/bin/sh", "-i", 0 );
8048753: 6a 00 pushl $0x0
8048755: 68 d0 87 04 08 pushl $0x80487d0
804875a: 68 d3 87 04 08 pushl $0x80487d3
804875f: 68 d3 87 04 08 pushl $0x80487d3
8048764: e8 db fe ff ff call 8048644 <_init+0x40>
8048769: 83 c4 10 addl $0x10,%esp
/home/scz/src/objtest.c:9
return 0;
804876c: 31 c0 xorl %eax,%eax
804876e: eb 04 jmp 8048774
8048770: 31 c0 xorl %eax,%eax
8048772: eb 00 jmp 8048774
/home/scz/src/objtest.c:10
}
8048774: c9 leave
8048775: c3 ret
8048776: 90 nop
如果说上面还不够清楚,可以用下面的命令辅助一下:
objdump -j .text -Sl objtest --prefix-addresses | more
objdump -j .text -Dl objtest | more
用以上不同的命令去试会得到惊喜!
分享到:
相关推荐
9.objdump使用:objdump是一种用于反编译二进制文件的工具,能够将二进制文件反编译成汇编语言代码。 10. 函数指针:函数指针是一种用于指向函数的指针,能够将函数作为参数传递给其他函数。 11. 函数调用约定:...
mtrace 使用指南 mtrace 是一个内存跟踪工具,可以帮助开发者检测和解决内存泄露问题。下面是 mtrace 的使用步骤和相关知识点: 环境变量设置 在使用 mtrace 之前,需要定义环境变量。在 env.c 文件中加入环境...
- **objdump:** 用于查看目标文件的汇编语言形式或二进制形式。 - **nm:** 显示目标文件中的符号列表。 - **readelf:** 读取并显示ELF格式文件的信息。 - **gcc/g++:** 支持内嵌汇编的编译器,可以将C/C++和汇编...
总结来说,Xtensa架构的程序员指南为开发者提供了如何在Xtensa处理器上编写汇编代码的详细指导,涉及了处理器的指令集架构、汇编语言的特性、操作系统底层开发中汇编代码的使用,以及使用相关编译器和调试工具进行...
- **HTML格式的Gnu文档**:包含了GCC编译器及其相关工具的详细使用指南和技术文档。 - **技术支持信息**:包括了如何获取技术支持的方法和联系方式等信息。 #### 六、系统需求 - **处理器**:至少需要支持M68K或...
#### 四、SDK使用指南 - **简介**:SDK(Software Development Kit)是软件开发工具包,包含了开发过程中所需的库文件、头文件、示例代码等资源。 - **工程建立**: - 启动Eclipse。 - 创建空项目。 - 配置项目...
standards.html可能涉及GNU编程规范,libiberty.html可能介绍binutils中使用的通用库函数,而configure.html可能涵盖了如何配置和构建binutils项目的指南。 8. **ELF文件格式** ELF(Executable and Linkable ...
这份文档提供了关于这些工具的全面介绍和使用指南,对于理解其功能、操作方式以及如何在实际项目中应用至关重要。 首先,我们要了解什么是Binutils。Binutils包含了诸如as(汇编器)、ld(链接器)、objdump(反...
- `nm`、`objdump`和`readelf`等工具用于检查库中的符号信息和二进制内容。 5. **版本控制**: - Solaris支持库版本控制,允许旧版应用程序与新版库共存,通过`-version_info`选项在创建库时指定版本信息。 6. *...
6. `assignment2.pdf`:可能是一个项目说明或者作业指南,详细描述了项目需求和评估标准。 7. `test.sh`:一个Shell脚本,可能用于自动化测试虚拟机和反汇编器的功能。 8. `return0`:可能是一个测试输入,用于检查...
- **man**:包含这些工具的手册页,提供了详细的使用指南。 - **mingw32**:针对Windows下的MinGW环境,表明此版本的binutils也支持跨平台编译。 - **include**:包含了binutils在编译过程中需要的头文件,供其他...
《Oracle Solaris 11 Linker and Libraries Guide》是Oracle公司发布的一份技术文档,主要针对Oracle Solaris 11操作系统中的链接器(Linker)和库(Libraries)进行了详细的指南。这份文档旨在帮助开发者和系统管理...
《ldd3-examples-3.x:Linux动态链接器实战指南》 在Linux系统中,动态链接器(Dynamic Linker)扮演着至关重要的角色,它负责在程序运行时解析并加载共享库,使得多个程序可以共享同一份内存空间,节省系统资源。...
- **readme.txt**:通常,压缩包中的readme.txt文件会包含重要的安装指南、使用说明或者开发者注意事项,确保仔细阅读并遵循其中的指示。 - **mingw64**:这个文件可能是一个目录,包含了64位版本的MinGW工具链。...
1. **binutils**:提供二进制工具,如`ld`, `as`, `objdump`等,是编译和链接程序的基础。 2. **compat-libstdc++-5.0.7**:兼容旧版的C++库,对于运行Oracle软件是必需的。 3. **glibc**和**glibc-devel**:GNU C库...
《深入理解binutils-2.29:构建与应用指南》 binutils是GNU项目中的一个核心组件,它是一套用于处理二进制文件的工具集合。在标题为"binutils-2.29.tar.gz"的压缩包中,我们获得了binutils的2.29版本,这是一款强大...
《深入理解binutils-2.32:构建与应用指南》 binutils是GNU项目中的一个关键组件,它是一套用于处理二进制文件的工具集合。本文将深入探讨binutils-2.32版本,解析其核心功能,以及如何在实际开发中使用和构建这个...
在实际操作中,用户需要解压binutils-2.22.tar.gz文件,然后按照官方文档的编译和安装指南进行操作。这通常包括配置(configure)、编译(make)和安装(make install)三个步骤。配置阶段可以指定安装路径和其他...
2. "附录1:Oprofile移植到intel xscale pxa 255开发板 - Kasmile的专栏 - CSDN博客.mht":这篇文章可能是关于将Oprofile移植到特定硬件平台,如Intel XScale PXA255开发板的指南。在嵌入式系统中,性能分析同样重要...
**Readme-说明.htm** 这个文件可能是关于binutils包的详细说明文档,包括安装指南、使用示例、更新日志等内容,对于理解和使用binutils工具集非常有帮助。 总之,`binutils`是Linux系统中不可或缺的一部分,它提供...