大家都知道用GCC的选项S来生成汇编代码,可是这样的汇编代码过于复杂,GCC生成了很多的额外信息,信息量大了,可读性却降低了,举个简单的例子:
下面是一段非常简单的C程序 test.c
int main()
{
int a = 1;
return a;
}
用GCC的S选项编译出来的汇编是这样的,几行的Code产生了非常多的信息,不偏于阅读和对照。(也可以加上选项 -fverbose-asm, 显示更多comment信息)
#gcc -S -fverbose-asm test.c
.file “temp.c”
.text
.globl main
.type main, @function
main:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl $1, %eax
leave
ret
.LFE2:
.size main, .-main
.section .eh_frame,”a”,@progbits
.Lframe1:
.long .LECIE1-.LSCIE1
.LSCIE1:
.long 0x0
.byte 0x1
.string “zR”
.uleb128 0x1
.sleb128 -8
.byte 0x10
.uleb128 0x1
.byte 0x3
.byte 0xc
.uleb128 0x7
.uleb128 0x8
.byte 0x90
.uleb128 0x1
.align 8
.LECIE1:
.LSFDE1:
.long .LEFDE1-.LASFDE1
.LASFDE1:
.long .LASFDE1-.Lframe1
.long .LFB2
.long .LFE2-.LFB2
.uleb128 0x0
.byte 0x4
.long .LCFI0-.LFB2
.byte 0xe
.uleb128 0x10
.byte 0x86
.uleb128 0x2
.byte 0x4
.long .LCFI1-.LCFI0
.byte 0xd
.uleb128 0x6
.align 8
.LEFDE1:
.ident “GCC: (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]”
.section .comment.SUSE.OPTs,”MS”,@progbits,1
.string “ospwg”
.section .note.GNU-stack,””,@progbits
用objdump命令则可以生成阅读性高很多的汇编代码, 除了信息精简了很多,而且还有和原始Code的对照,是不是这样看就清楚多了。
#gcc -g -c test.c
#objdump -d -M intel -S test.o
temp.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <main>:
//#include <iostream>
//using namespace std;
int main()
{
0: 55 push rbp
1: 48 89 e5 mov rbp,rsp
int a;
return 1;
4: b8 01 00 00 00 mov eax,0x1
}
9: c9 leave
a: c3 ret
## 博客仅作个人记录##