随笔 - 121  文章 - 0  评论 - 11  阅读 - 74万

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

 

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 on   feng..liu  阅读(1712)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示