ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-04-28 20:03:26  阅读:347  来源: 互联网

标签:00 objdump MODULE init 实例 exit 反汇编 hello


 

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选项,直接阅读汇编代码。

标签:00,objdump,MODULE,init,实例,exit,反汇编,hello
来源: https://www.cnblogs.com/fengliu-/p/16204252.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有