objdump命令详解

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。

选项

--archive-headers 
-a 
显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 -b bfdname 
--target=bfdname 
指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: objdump -b oasys -m vax -h fu.o 
显示fu.o的头部摘要信息,明确指出该文件是Vax系统下用Oasys编译器生成的目标文件。objdump -i将给出这里可以指定的目标码格式列表。 -C 
--demangle 
将底层的符号名解码成用户级名字,除了去掉所开头的下划线之外,还使得C++函数名以可理解的方式显示出来。 --debugging 
-g 
显示调试信息。企图解析保存在文件中的调试信息并以C语言的语法显示出来。仅仅支持某些类型的调试信息。有些其他的格式被readelf -w支持。 -e 
--debugging-tags 
类似-g选项,但是生成的信息是和ctags工具相兼容的格式。 --disassemble 
-d 
从objfile中反汇编那些特定指令机器码的section。-D 
--disassemble-all 
与 -d 类似,但反汇编所有section.-EB 
-EL 
--endian={big|little} 
指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records. -f 
--file-headers 
显示objfile中每个文件的整体头部摘要信息。-h 
--section-headers 
--headers 
显示目标文件各个section的头部摘要信息。  -H 
--help 
简短的帮助信息。 -i 
--info 
显示对于 -b 或者 -m 选项可用的架构和目标格式列表。 -j name
--section=name 
仅仅显示指定名称为name的section的信息 -l
--line-numbers 
用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。 -m machine 
--architecture=machine 
指定反汇编目标文件时使用的架构,当待反汇编文件本身没描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构. --reloc 
-r 
显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。 --dynamic-reloc 
-R 
显示文件的动态重定位入口,仅仅对于动态目标文件意义,比如某些共享库。 -s 
--full-contents 
显示指定section的完整内容。默认所有的非空section都会被显示。-S 
--source 
尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。 --show-raw-insn 
反汇编的时候,显示每条汇编指令对应的机器码,如不指定--prefix-addresses,这将是缺省选项。 --no-show-raw-insn 
反汇编时,不显示汇编指令的机器码,如不指定--prefix-addresses,这将是缺省选项。 --start-address=address 
从指定地址开始显示数据,该选项影响-d、-r和-s选项的输出。 --stop-address=address 
显示数据直到指定地址为止,该项影响-d、-r和-s选项的输出。 -t 
--syms 
显示文件的符号表入口。类似于nm -s提供的信息 -T 
--dynamic-syms 
显示文件的动态符号表入口,仅仅对动态目标文件意义,比如某些共享库。它显示的信息类似于 nm -D|--dynamic 显示的信息。 -V 
--version 
版本信息 --all-headers 
-x 
显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。 -z 
--disassemble-zeroes 
一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。

实例

首先,在给出后面大部分测试所基于的源代码以及编译指令。 源代码如下:
mytest.cpp

#include<stdio.h>
void exploit()
{system("/bin/sh");
}
void func()
{char str[0x20];read(0, str, 0x50);
}
int main()
{func();return 0;
}

编译:

gcc -c -g -o mytest mytest.c

在这里插入图片描述
查看当前使用的objdump的版本号:

objdump -V 

在这里插入图片描述
显示可用的架构和目标结构列表:

objdump -i

在这里插入图片描述
显示mytest文件中的text段的内容:

objdump --section=.text -s mytest

在这里插入图片描述
这里注意,不能单独使用-j或者–section,例如objdump --section=.text mytest是不会运行成功的。

反汇编mytest中的text段内容,并尽可能用源代码形式表示:

objdump -j .text -S mytest

在这里插入图片描述
这里注意,不能单独使用-j或者–section,例如objdump -j .text mytest是不会运行成功的。另外-S命令对于包含调试信息的目标文件,显示的效果比较好,如果编译时没有指定-g选项,那么目标文件就不包含调试信息,那么显示效果就差多了。

反汇编出mytest.o的源代码:

objdump -S mytest

在这里插入图片描述
这里,尤其当编译的时候指定了-g这种调试参数时,反汇编的效果比较明显。隐含了-d参数。

显示文件的符号表入口:

objdump -t mytest

在这里插入图片描述
显示文件的符号表入口,将底层符号解码并表示成用户级别:

**objdump -t -C mytest**

在这里插入图片描述

反汇编目标文件的特定机器码段:

objdump -d mytest

在这里插入图片描述
这里,对text段的内容进行了反汇编。

反汇编特定段,并将汇编代码对应的文件名称和行号对应上:

objdump -d -l mytest

在这里插入图片描述
这里,项"-d"从objfile中反汇编那些特定指令机器码的section,而使用"-l"指定用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用,使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。

显示目标文件各个段的头部摘要信息:

objdump -h mytest

在这里插入图片描述
这里,更多的内容参见man objdump中的这个选项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java——异常(try...catch...finally)

public class Demo5_Throwable {public static void main(String[] args) {try{System.out.println(1/0);}catch(Exception e){System.out.println(e.getMessage());//获取异常信息,返回字符串&#xff1b;System.out.println(e.toString());//获取异常类名和异常信息&#xff…

Python程序反转给定数字(2种不同方式)

Take input number from the user and print its reverse. 从用户处获取输入号码并打印其反面。 Example: 例&#xff1a; Input:12345Output:54321Here, we are implementing program to reversing a given number using 2 different ways. 在这里&#xff0c;我们正在实施程…

外汇期货学习专帖(转)

一篇好文,值得深思! (转) 我的一些所看所想,和大家聊聊 ; d: R ^6 c* A2 e X" y8 y4 Bhttp://www.fx998.cn 说来惭愧,很久以前,俺在期货公司混事,95年以前国内期货公司从外盘棉花到咖啡....,外汇期指到原油.都能*作.是一派欣欣向荣之景.95年之后,按国家规定都转了内…

《Pro ASP.NET MVC 3 Framework》学习笔记之四【领域模型介绍】

主题&#xff1a;应用领域驱动开发(Applying Domain-Driven Development) Domain Model是MVC程序的"心脏"&#xff0c;其他的一切&#xff0c;包括Controllers和Views仅仅是用来跟Domain Model交互的一种方式&#xff0c;ASP.NET MVC并没有限制使用在Domain Model上面…

Java——集合框架(List)

集合框架&#xff08;List的三个子类的特点&#xff09; A&#xff1a;List的三个子类的特点 ArrayList&#xff1a; 底层数据结构是数组&#xff0c;查询快&#xff0c;增删慢。 线程不安全&#xff0c;效率高。 Vector&#xff1a; 底层数据结构是数组&#xff0c;查询…

一步一步学pwntools(适合新手)

序 pwntools是一个二进制利用框架。官方文档提供了详细的api规范。然而目前并没有一个很好的新手教程。因此我用了我过去的几篇writeup。由于本文只是用来介绍pwntools使用方法&#xff0c;我不会过于详细的讲解各种二进制漏洞攻击技术。 Pwntools的“Hello World” 栈溢出无…

关于J2EE中死锁问题的研究(1)

大多数重要的应用程序都涉及高度并发性和多个抽象层。并发性与资源争用有关&#xff0c;并且是导致死锁问题增多的因素之一。多个抽象层使隔离并修复死锁环境的工作变得更加困难。 通常&#xff0c;当同时执行两个或两个以上的线程时&#xff0c;如果每个线程都占有一个资源并请…

python变量分配内存_Python | 声明任何变量而不分配任何值

python变量分配内存Since, Python is a dynamic programming language so there is no need to declare such type of variable, it automatically declares when first time value assign in it. 由于Python是一种动态编程语言&#xff0c;因此无需声明此类变量&#xff0c;它…

UVA 10004 - Bicoloring

模拟染色&#xff0c;因为只有两种颜色&#xff0c;所以分别用 0、 1 代表这两种颜色&#xff0c;然后从0开始深搜&#xff0c;如果 每个点都能染上色&#xff0c;且相邻两点的颜色不同&#xff0c;则符合要求。 #include<stdio.h>#include<string.h>#define MAXN …

标志寄存器:CF、PF、AF、ZF、SF、TF、DF、OF

注&#xff1a;下面说到的标志寄存器都是缩写&#xff0c;C就是CF&#xff0c;其他也一样 标志寄存器&#xff1a;C、P、A、Z、S、T、D、O的内容只会是0或1&#xff0c;0表示假&#xff0c;1表示真 O&#xff1a;溢出标志 一个寄存器如果存放的值超过所能表示的范围&#xf…

揭秘:销售人员26个致命弱点

销售人员有许多积极的态度需要学习&#xff0c; 同时也有许多不良的习惯应该避免&#xff0c;以免影响个性及专业能力。仔细看看这些缺点&#xff0c;反省你自己&#xff0c;还需要改善的画&#xff0c;直到你给自己一百分为止。找一位深知你的好 友&#xff0c;让他诚实地给你…

Java——集合(练习题)

例题1&#xff1a;产生10个1~20之间的随机数&#xff0c;要求随机数不能重复 import java.util.HashSet; import java.util.Random; public class Test1 {/*** 产生10个1~20之间的随机数&#xff0c;要求随机数不能重复* * 分析&#xff1a;* 1,有Random类创建随机数对象* 2&a…

模块化 组件化 工程化_软件工程中的模块和软件组件

模块化 组件化 工程化The module in software is a small part of the software that is responsible for performing any kind of functionality. Sometimes, the term sub-program is also used to refer to the term module. 软件中的模块是软件的一小部分&#xff0c;负责…

Firefox2狂占CPU解决办法

https://images.cnblogs.com/cnblogs_com/Tisty/138006/o_firefox3.jpg 看了一下&#xff0c;不知道 "jpeg_free_large" 是干啥的&#xff0c;遂用 "Firefox jpeg_free_large" Google 一下&#xff0c;出来的一堆东西里有帖子说可能和 Apple 的 QuickTime …

PUSHAD和POPAD,以及PUSHA和POPA

PUSHAD PUSHAD也叫保护现场&#xff0c;就是把我们的寄存器压入栈中 pushad是把eax&#xff0c;ecx&#xff0c;edx&#xff0c;ebx&#xff0c;esp、ebp&#xff0c;esi&#xff0c;edi依次压入栈中&#xff0c;ESP会减少32&#xff0c;相当于&#xff1a; push eax push ec…

Java——n个数的全排列

例题&#xff1a; 输入一串字符串&#xff0c;将该字符串中的字符元素进行全排列&#xff0c;然后&#xff0c;一串输出结果。 例如&#xff1a; 输入&#xff1a; ABCD 输出&#xff1a; ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA…

一段个性化stringgrid的代码

需要注意的是 该段程序使用了 canvas。 procedure TW_CkbTaiZhang.KhLstDrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);begin if ARowkhlst.Row then with khlst.Canvas do //画 cell 的边框 begin Pen.Color : $00ff0000; …

dp 扔鸡蛋_使用动态编程(DP)的鸡蛋掉落问题

dp 扔鸡蛋Problem statement: You are given N floor and K eggs. You have to minimize the number of times you have to drop the eggs to find the critical floor where critical floor means the floor beyond which eggs start to break. Assumptions of the problem: 问…

MOVSX和MOVZX

MOVSX 先符号扩展,再传送 格式&#xff1a; MOVSX 操作数A &#xff0c;操作数B //操作数B的空间小于A比如说我们使用命令&#xff1a; movsx eax&#xff0c;bxbx是16位&#xff0c;eax是32位&#xff0c;传值过程&#xff1a; 先用bx的符号位把eax高16填满&#xff0c;b…

统计学习以及支持向量机的国内外基本比较重要的书

1、支持向量机导论&#xff0c;此书乃是SVM方面的经典著作&#xff0c; 该书的作者也是近年来SVM、kernel methods学术圈内的活跃学者&#xff0c;对于这些领域均有过重要的贡献。这本书从“线性机器、核方法、统计学习理论、凸优化”四个方面揭示了SVM的内在机理 --利用核…