GCC -S 参数
获取更多嵌入式、Linux学习资料,获取独家嵌入式Linux学习路线地图,欢迎加群:398294860,观看更专业、更系统地嵌入式视频教程,请关注:wanglitao.taobao.com
如果只对C源程序做编译处理,不汇编,可以使用gcc -S 参数:会gcc会将C源程序做预处理、编译操作,生成对应的汇编文件,不再做进一步的汇编和链接操作。
# gcc -S hello.c
# ls
hello.c hello.s
当然,我们也可以将上一节经过预处理后的hello.i文件编译为hello.s汇编文件:
# gcc -S hello.i
两者生成的hello.s内容是一样的:
# cat hello.s
.file "hello.c"
.text
.section .rodata
.LC0:
.string "hello zhaixue.cc!"
.LC2:
.string "PI = %f\n"
.LC3:
.string "release mode"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
leaq .LC0(%rip), %rdi
call puts@PLT
movq .LC1(%rip), %rax
movq %rax, %xmm0
leaq .LC2(%rip), %rdi
movl $1, %eax
call printf@PLT
leaq .LC3(%rip), %rdi
call puts@PLT
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.section .rodata
.align 8
.LC1:
.long 1374389535
.long 1074339512
.ident "GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0"
.section .note.GNU-stack,"",@progbits
.section .note.gnu.property,"a"
.align 8
.long 1f - 0f
.long 4f - 1f
.long 5
0:
.string "GNU"
1:
.align 8
.long 0xc0000002
.long 3f - 2f
2:
.long 0x3
3:
.align 8
4:
《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客