自己动手构造编译系统:编译、汇编与链接1.3.2 编译
1.3.2 编译
接下来GCC对hello.i进行编译,命令如下:
$gcc –S hello.i –o hello.s
编译后产生的汇编文件hello.s内容如下:
.file "hello.c"
.section .rodata
.LC0:
.string "Hello World!"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
movl $.LC0, %eax
movl %eax, (%esp)
call printf
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"
.section .note.GNU-stack,"",@progbits
GCC生成的汇编代码的语法是AT&T格式,与Intel格式的汇编有所不同(若要生成Intel格式的汇编代码,使用编译选项“-masm=intel”即可)。比如立即数用“$”前缀,寄存器用“%”前缀,内存寻址使用小括号等。区别最大的是,AT&T汇编指令的源操作数在前,目标操作数在后,这与Intel汇编语法正好相反。本书会在后续章节中详细描述这两种汇编语法格式的区别。
不过我们仍能从中发现高级语言代码中传递过来的信息,比如字符串“Hello World!”、主函数名称main、函数调用call printf等。
相关文章
- 一例误用unsafe包引起的内存问题
- 利用Kubernetes与SRRS打造云原生基础架构
- 【验证码逆向专栏】安某客滑块逆向
- Go语言之闭包篇
- 性能测试|基于JMeter 完成典型电商场景(首页浏览)的性能压测
- 【验证码逆向专栏】某片滑块、点选验证码逆向分析
- 【K哥爬虫普法】老铁需要车牌靓号吗?判刑的那种
- 【验证码逆向专栏】某验三代滑块验证码逆向分析
- 三行代码解决Springboot框架自带异常
- 性能测试|JMeter逻辑控制器(二)
- 【验证码逆向专栏】某验四代滑块验证码逆向分析
- 【验证码逆向专栏】某验二代滑块验证码逆向分析
- 性能测试|JMeter逻辑控制器(三)
- 性能测试|JMeter逻辑控制器(四)
- C++ 异常处理简介
- 性能测试|JMeter逻辑控制器(五)
- C/C++中const char*、char const*、char * const三者的区别
- 性能测试|JMeter上传下载文件
- quiver函数绘图详解【一】
- 性能测试|JMeter逻辑控制器(七)