gcc中c程序到汇编到可执行文件的过程
偶然看了一篇对比while(1)和for(;;)的文章,发现gcc还可以生成汇编程序,决定也学习一下。
首先写了一个再简单不过的c程序test.c
main(){}
自己能想到的最简单的程序了,编译用gcc -S test.c,生成了汇编文件test.s,大小635字节
.arch armv6
.eabi_attribute 27, 3
.eabi_attribute 28, 1
.fpu vfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 18, 4
.file "test.c"
.text
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
str fp, [sp, #-4]!
add fp, sp, #0
mov r0, r3
add sp, fp, #0
ldmfd sp!, {fp}
bx lr
.size main, .-main
.ident "GCC: (Debian 4.6.3-14+rpi1) 4.6.3"
.section .note.GNU-stack,"",%progbits
看不懂,继续gcc -c test.s生成目标文件test.o,824字节,更看不懂,再继续gcc -o test test.o生成运行文件test,4964字节,可以运行./test,当然啥结果都没有和直接gcc test.c生成的a.out应该是一样的。
参考:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66565&extra=