1 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.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
: 将代码段反汇编;
• objdump -s
: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;
• objdump -c
: 将c 符号名逆向解析
• objdump -l
: 反汇编代码中插入文件名和行号
• objdump -j section
: 仅反汇编指定的section
2 objdump帮助信息
输出objdump帮助信息:
objdump --help
或者 man objdump
usage: objdump