简单实例分析objdump反汇编用法

转:https://www.pianshen.com/article/3362131908/

 

objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。

 

1. 准备代码hello.c

 1 #include <linux/module.h> 
 2 #include <linux/init.h>  
 3 #include <linux/kernel.h>
 4  
 5 MODULE_LICENSE("GPL");
 6 MODULE_AUTHOR("baoli");
 7 MODULE_DESCRIPTION("hello world module");
 8  
 9 static int __init hello_init(void)
10 {
11     int * p = 0;
12     printk(KERN_WARNING "hello world.\n");
13     *p = 1;
14  
15     return 0;
16 }
17  
18 static void __exit hello_exit(void)
19 {
20     printk(KERN_WARNING "hello exit!\n");
21 }
22  
23 module_init(hello_init);
24 module_exit(hello_exit);

2. 反汇编分析

执行:objdump -d hello.o > assemble.txt

汇编代码如下:

 1 hello.o:     file format elf64-x86-64
 2  
 3 Disassembly of section .init.text:
 4  
 5 0000000000000000 <init_module>:
 6 MODULE_LICENSE("GPL");
 7 MODULE_AUTHOR("baoli");
 8 MODULE_DESCRIPTION("hello world module");
 9  
10 static int __init hello_init(void)
11 {
12    0:    55                       push   %rbp
13    1:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
14    8:    48 89 e5                 mov    %rsp,%rbp
15    b:    e8 00 00 00 00           callq  10 <init_module+0x10>
16   10:    c7 04 25 00 00 00 00     movl   $0x1,0x0
17   17:    01 00 00 00 
18   1b:    31 c0                    xor    %eax,%eax
19   1d:    5d                       pop    %rbp
20   1e:    c3                       retq   
21  
22 Disassembly of section .exit.text:
23  
24 0000000000000000 <cleanup_module>:
25    0:    55                       push   %rbp
26    1:    48 c7 c7 00 00 00 00     mov    $0x0,%rdi
27    8:    48 89 e5                 mov    %rsp,%rbp
28    b:    e8 00 00 00 00           callq  10 <cleanup_module+0x10>
29   10:    5d                       pop    %rbp
30   11:    c3                       retq   

3. objdump总结

objdump -D -b binary -m i386 a.bin

-D表示对全部文件进行反汇编,-b表示二进制,-m表示指令集架构,a.bin就是我们要反汇编的二进制文件

objdump -m可以查看更多支持的指令集架构,如i386:x86-64,i8086等

1)objdump -d:反汇编目标文件中包含的可执行指令。

2)如果需要混合显示源码和汇编代码,需要加上-S选项,并且在编译目标文件时加上-g。

3)如果在编译目标文件时没有加-g选项,则-S相当于-d。

4)-S选项生成的混合代码,有时文件结构混乱,可读性较差。推荐使用-d选项,直接阅读汇编代码。

posted @ 2021-04-15 10:30  一本正经-胡说八道  阅读(6298)  评论(0编辑  收藏  举报