簡單實例分析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選項,直接閱讀匯編代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM