📅  最后修改于: 2023-12-03 15:02:43.574000             🧑  作者: Mango
Objdump 是 Linux 一款强大的反汇编工具,可以用于分析二进制文件,了解其内部结构,查看和分析二进制文件的指令集、符号表、重定位表等信息。本文将介绍 Objdump 的基本用法及其示例。
Objdump 的基本使用语法如下:
objdump [option(s)] filename
其中,option(s)
是可选参数,用于指定需要分析的信息类型,filename
是需要反汇编的二进制文件路径。
常见的 Objdump 选项包括:
-d
:反汇编出编译后的代码,可用于查看程序的汇编代码;-t
:查看符号表;-r
:查看重定位表;-S
:同时反汇编出编译前和编译后的代码;-x
:查看全部头文件信息。以查看一个可执行文件的汇编代码为例,执行以下命令:
objdump -d /usr/bin/bash
将输出以下信息:
/usr/bin/bash: file format elf64-x86-64
Disassembly of section .init:
0000000000429610 <_init>:
429610: 48 83 ec 08 sub $0x8,%rsp
429614: 48 8b 05 6d 3c 02 00 mov 0x23c6d(%rip),%rax # 453288 <__gmon_start__>
42961b: 48 85 c0 test %rax,%rax
42961e: 74 02 je 429622 <_init+0x12>
429620: ff d0 callq *%rax
429622: 48 83 c4 08 add $0x8,%rsp
429626: c3 retq
Disassembly of section .plt:
0000000000429630 <_ZN9__gnu_cxx18__exchange_and_addEPVii>:
429630: ff 35 c2 27 02 00 pushq 0x227c2(%rip) # 44c3f8 <_GLOBAL_OFFSET_TABLE_+0x88>
429636: ff 25 c4 27 02 00 jmpq *0x227c4(%rip) # 44c400 <_GLOBAL_OFFSET_TABLE_+0x90>
42963c: 0f 1f 40 00 nopl 0x0(%rax)
0000000000429640 <_ZNKSt6vectorIcSaIcEE5beginEv>:
429640: ff 25 be 27 02 00 jmpq *0x227be(%rip) # 44c404 <_GLOBAL_OFFSET_TABLE_+0x94>
429646: 68 00 00 00 00 pushq $0x0
42964b: e9 e0 ff ff ff jmpq 429630 <_plt+0>
......
可以看到,该命令反汇编了 /usr/bin/bash
可执行文件的 .init
和 .plt
两个段的汇编代码。
实际上,我们可以在任何二进制文件上运行 Objdump 命令,如反汇编一个 C 程序编译后的可执行文件:
objdump -d ./a.out
将输出该程序的反汇编代码。
Objdump 是 Linux 下一款强大的反汇编工具,它可以用于查看某个二进制文件的头文件、符号表、重定位表等信息,还可以帮助程序员了解该程序运行时所执行的汇编代码信息。