一、objdump简介
1、objdump介绍
objdump显示关于一个或多个对象文件的信息。这些选项控制要显示的特定信息。这些信息对正在使用编译工具的程序员非常有用,而不是只希望自己的程序编译和工作的程序员。
2、反汇编常用参数
objdump -d <file(s)>: 将代码段反汇编;
objdump -S <file(s)>: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;
objdump -C <file(s)>: 将 C++ 符号名逆向解析
objdump -l <file(s)>: 反汇编代码中插入文件名和行号
objdump -j section <file(s)>: 仅反汇编指定的 section
3、objdump参数详解
objdump --help
或者 man objdump
,或者使用在线网站https://sourceware.org/binutils/docs/binutils/objdump.html
Usage: objdump
二、反汇编示例
源文件main.c
:
/* main.c */
#include
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、显示main.c
的汇编代码
mate@intel-nuc:~/Documents/optimize$ gcc -S main.c -o main.s
mate@intel-nuc:~/Documents/optimize$ cat 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
...
2、目标文件反汇编
mate@intel-nuc:~/Documents/optimize$ gcc -c main.c -o main.o
mate@intel-nuc:~/Documents/optimize$ objdump -s -d main.o > main.o.txt
目标文件main.o
的反汇编结果输出到文件main.o.tx
显示源代码同时显示行号
mate@intel-nuc:~/Documents/optimize$ objdump -j .text -ld -C -S main.o > main.o.txt
4、可执行文件反汇编
mate@intel-nuc:~/Documents/optimize$ gcc -o main main.c
mate@intel-nuc:~/Documents/optimize$ objdump -s -d main > main.txt
反汇编同时显示源代码
mate@intel-nuc:~/Documents/optimize$ gcc -g -o main main.c
mate@intel-nuc:~/Documents/optimize$ objdump -S -d main > main.txt
参考资料