objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附加信息,下面为大家讲解一下Linux下使用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;
}123456789101112131415161718192021
main.c
的汇编代码gcc -S -o main.s main.c1
汇编文件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
...12345678910111213141516
gcc -c -o main.o main.c
objdump -s -d main.o > main.o.txt12
目标文件main.o
的反汇编结果输出到文件main.o.txt
反汇编同时显示源代码
gcc -g -c -o main.o main.c
objdump -S -d main.o > main.o.txt12
显示源代码同时显示行号
objdump -j .text -ld -C -S main.o > main.o.txt1
gcc -o main main.c
objdump -s -d main > main.txt12
反汇编同时显示源代码
gcc -g -o main main.c
objdump -S -d main > main.txt12
objdump -d
: 将代码段反汇编;objdump -S
: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g
参数,即需要调试信息;objdump -C
: 将C++符号名逆向解析objdump -l
: 反汇编代码中插入文件名和行号objdump -j section
: 仅反汇编指定的section输出objdump帮助信息: objdump --help
或者 man objdump
Usage: objdump
Display information from object
. 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 @
Read options from
-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 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
.12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
网页名称:Linux下使用objdump进行反汇编
URL网址:http://www.shufengxianlan.com/qtweb/news8/369108.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联