objdump(Linux)反汇编命令使用指南

原创 2018年04月17日 20:44:33

1 objdump反汇编示例

源文件main.c

/* main.c */
#include <stdio.h>

void swap(int* first, int* second)
{
    int temp = *first;
    *first = *second;
    *second = temp;
}

int main(void)
{
    int a = 10;
    int b = 20;

    printf("a = %d; b = %d;\n", a, b);
    swap(&a, &b);
    printf("a = %d; b = %d;\n", a, b);

    return 0;
}
1.1 显示main.c的汇编代码
gcc -S -o main.s main.c

汇编文件main.s

    .file   "main.c"
    .text
    .globl  swap
    .type   swap, @function
swap:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movq    %rdi, -24(%rbp)
    movq    %rsi, -32(%rbp)
    movq    -24(%rbp), %rax
    ...
1.2 目标文件反汇编
gcc -c -o main.o main.c
objdump -s -d main.o > main.o.txt

目标文件main.o的反汇编结果输出到文件main.o.txt
反汇编同时显示源代码

gcc -g -c -o main.o main.c
objdump -S -d main.o > main.o.txt

显示源代码同时显示行号

objdump -j .text -ld -C -S main.o > main.o.txt
1.3 可执行文件反汇编
gcc -o main main.c
objdump -s -d main > main.txt

反汇编同时显示源代码

gcc -g -o main main.c
objdump -S -d main > main.txt
1.4 objdump反汇编常用参数
  • objdump -d <file(s)>: 将代码段反汇编;
  • objdump -S <file(s)>: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;
  • objdump -C <file(s)>: 将C++符号名逆向解析
  • objdump -l <file(s)>: 反汇编代码中插入文件名和行号
  • objdump -j section <file(s)>: 仅反汇编指定的section

2 objdump帮助信息

Usage: objdump <option(s)> <file(s)>
    Display information from object <file(s)>.
    At least one of the following switches must be given:
    -a, --archive-headers    Display archive header information
    -f, --file-headers       Display the contents of the overall file header
    -p, --private-headers    Display object format specific file header contents
    -P, --private=OPT,OPT... Display object format specific contents
    -h, --[section-]headers  Display the contents of the section headers
    -x, --all-headers        Display the contents of all headers
    -d, --disassemble        Display assembler contents of executable sections
    -D, --disassemble-all    Display assembler contents of all sections
    -S, --source             Intermix source code with disassembly
    -s, --full-contents      Display the full contents of all sections requested
    -g, --debugging          Display debug information in object file
    -e, --debugging-tags     Display debug information using ctags style
    -G, --stabs              Display (in raw form) any STABS info in the file
    -W[lLiaprmfFsoRt] or
    --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
          =frames-interp,=str,=loc,=Ranges,=pubtypes,
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
          =addr,=cu_index]
                           Display DWARF info in the file
    -t, --syms               Display the contents of the symbol table(s)
    -T, --dynamic-syms       Display the contents of the dynamic symbol table
    -r, --reloc              Display the relocation entries in the file
    -R, --dynamic-reloc      Display the dynamic relocation entries in the file @<file>                  Read options from <file>
    -v, --version            Display this program's version number
    -i, --info               List object formats and architectures supported
    -H, --help               Display this information

 The following switches are optional:
    -b, --target=BFDNAME     Specify the target object format as BFDNAME
    -m, --architecture=MACHINE     Specify the target architecture as MACHINE
    -j, --section=NAME       Only display information for section NAME
    -M, --disassembler-options=OPT Pass text OPT on to the disassembler
    -EB --endian=big         Assume big endian format when disassembling
    -EL --endian=little      Assume little endian format when disassembling
      --file-start-context   Include context from start of file (with -S)
    -I, --include=DIR        Add DIR to search list for source files
    -l, --line-numbers       Include line numbers and filenames in output
    -F, --file-offsets       Include file offsets when displaying information
    -C, --demangle[=STYLE]   Decode mangled/processed symbol names
                             The STYLE, if specified, can be `auto', `gnu',
                                  `lucid', `arm', `hp', `edg', `gnu-v3', `java'
                                  or `gnat'
    -w, --wide               Format output for more than 80 columns
    -z, --disassemble-zeroes       Do not skip blocks of zeroes when disassembling
      --start-address=ADDR   Only process data whose address is >= ADDR
      --stop-address=ADDR    Only process data whose address is <= ADDR
      --prefix-addresses     Print complete address alongside disassembly
      --[no-]show-raw-insn   Display hex alongside symbolic disassembly
      --insn-width=WIDTH     Display WIDTH bytes on a single line for -d
      --adjust-vma=OFFSET    Add OFFSET to all displayed section addresses
      --special-syms         Include special symbols in symbol dumps
      --prefix=PREFIX        Add PREFIX to absolute paths for -S
      --prefix-strip=LEVEL   Strip initial directory names for -S
      --dwarf-depth=N        Do not display DIEs at depth N or greater
      --dwarf-start=N        Display DIEs starting with N, at the same depth
                             or deeper
      --dwarf-check          Make additional dwarf internal consistency checks.      

objdump: supported targets: elf64-x86-64 elf32-i386 elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex
objdump: supported architectures: i386 i386:x86-64 i386:x64-32 i8086 i386:intel i386:x86-64:intel i386:x64-32:intel l1om l1om:intel k1om k1om:intel plugin

The following i386/x86-64 specific disassembler options are supported for use
with the -M switch (multiple options should be separated by commas):
    x86-64      Disassemble in 64bit mode
    i386        Disassemble in 32bit mode
    i8086       Disassemble in 16bit mode
    att         Display instruction in AT&T syntax
    intel       Display instruction in Intel syntax
    att-mnemonic
                Display instruction in AT&T mnemonic
    intel-mnemonic
                Display instruction in Intel mnemonic
    addr64      Assume 64bit address size
    addr32      Assume 32bit address size
    addr16      Assume 16bit address size
    data32      Assume 32bit data size
    data16      Assume 16bit data size
    suffix      Always display instruction suffix in AT&T syntax
Report bugs to <http://bugzilla.redhat.com/bugzilla/>.

3 参考资料

[1] objdump反汇编用法示例
[2] objdump命令的使用
[3] GNU Binary Utilities: objdump - Sourceware
[4] stackoverflow - objdump

linux下objdump命令用法介绍及如何使用objdump命令进行反汇编

linux下objdump命令的具体选项如下: objdump [-a│--archive-headers] [-b bfdname│--target=bfdname...
  • moqingxinai2008
  • moqingxinai2008
  • 2016-12-30 17:57:32
  • 1858

gcc命令objdump用法----反汇编

gcc命令objdump用法 gcc命令之 objdump ---------------objdump是用查看目标文件或者可执行的目标文件的构成的GCC工具---------- 以下3条...
  • cwcwj3069
  • cwcwj3069
  • 2012-12-08 18:07:07
  • 22661

linux 下使用 objdump 反汇编

objdump有点象那个快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息。对于一般只想让自己程序跑起来的程序员,这个命令没有更多意义,对于想进一步了解系统的程序员,...
  • nwf5d
  • nwf5d
  • 2009-08-07 19:14:00
  • 19714

Linux下反汇编指定的函数

在debug二进制程序的时候,难免会用到
  • wangzuxi
  • wangzuxi
  • 2014-11-20 21:38:07
  • 1582

Linux下的objdump反汇编工具

1.  [wzb@embedded controller1]$ objdump --help  Usage: objdump  Display information from object ...
  • wzb56
  • wzb56
  • 2012-05-03 18:21:17
  • 4579

ARM Linux内核驱动异常定位调试--反汇编arm-linux-objdump

ARM Linux内核驱动异常定位方法分析--反汇编方式 原文链接:http://blog.csdn.net/hunhunzi/article/details/7052032 最近在搞Atmel 的...
  • gqb666
  • gqb666
  • 2013-12-31 18:27:24
  • 4794

Linux 下使用 objdump 反汇编

原文http://www.linuxidc.com/Linux/2011-05/35775.htm objdump有点象那个快速查看之流的工具,就是以一种可阅读的格式让你更多地了解二进制文件...
  • u011131874
  • u011131874
  • 2016-10-18 21:54:26
  • 2105

objdump反汇编用法示例

objdump反汇编,反汇编与源代码混合显示,C++符号逆向解析。
  • zoomdy
  • zoomdy
  • 2016-01-22 18:49:37
  • 13276

反汇编工具objdump的使用简介

《朱老师物联网大讲堂》学习笔记 学习网站:www.zhulaoshi.org objdump是我们进行反汇编的工具 还记得Makefile文件吗? led.bin: start.o  arm-...
  • qq_18973645
  • qq_18973645
  • 2016-03-27 20:31:52
  • 3432

gcc 如何编译so 和 objdump 反汇编

1、打开cygwin 终端 2、切换到源码所在目录 3、通过gcc编译 输入:gcc test.c -fPIC -shared -o libtest.so ...
  • xiongtiancheng
  • xiongtiancheng
  • 2017-09-04 22:54:30
  • 610
收藏助手
不良信息举报
您举报文章:objdump(Linux)反汇编命令使用指南
举报原因:
原因补充:

(最多只允许输入30个字)