国庆策划03|揭秘代码优化操作和栈保护机制
LMOS
你好,我是 LMOS。
今天是国庆假期策划的第三期。我们来公布第一期主观题的答案。希望你先尝试自己梳理思路,尝试回答问题以后,再来查看参考答案。
第一题
在前面课程里,我们一起揭秘了 C 语言编译器的“搬砖”日常,搞清楚了 C 语言会如何处理各种类型变量、各种运算符、流程控制以及由它们组成的函数,并把这些内容加以转换,对应到机器指令。你知道在这个转换过程中,C 编译器为了提高程序的执行性能,会有哪些额外的操作吗?试试概括一下这些操作?
第一题参考答案
存在额外的操作,概括来说是对代码进行优化操作。
为了提高程序的执行性能,C 语言编译器在经过语义分析的阶段之后,会生成平台无关的中间代码,然后经历三次不同级别的代码优化。
这里首先要经历中间代码级的代码优化;而后,编译器把中间代码优化的结果作为输入,生成机器相关的目标代码;之后还会再经过一次目标代码级别的代码优化,这个优化策略和具体机器的硬件结构高度相关,且不通用。
完成了整个优化过程后,就会产生最终运行机器平台上的目标代码了。一般通用的优化代码操作具体包括四个方面,我们挨个来看看。
第一类操作是删除多余运算。编译器分析中间代码的时候,可能会发现一些计算操作属于重复计算。因为有些计算并没有让结果发生变化,它们是多余的,完全可以删除。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文主要介绍了代码优化操作和栈保护机制。在代码优化方面,C语言编译器为了提高程序执行性能,会进行中间代码级和目标代码级的优化,包括删除多余运算、代码外提、强度削弱和合并已知量等操作。而在栈保护机制方面,介绍了编译器和操作系统的栈保护措施,包括对栈内缓冲区溢出的检查、页表的NX位设置、地址空间分布随机化和栈溢出保护canary技术。这些措施可以有效防止栈中数据被破坏,从而提高程序的安全性。文章内容涵盖了代码优化和安全机制,对于想要了解这些技术特点的读者来说,是一份很有价值的参考资料。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》,新⼈⾸单¥68
《计算机基础实战课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- peter请教一个问题: Q1:随机地址是物理地址还是虚拟地址? 文中提到的ALSR方法,会把地址空间进行随机化分布,请问被随机化分布的地址是物理地址还是虚拟地址?
作者回复: 虚拟地址
2022-10-08归属地:湖北 - LockedX彭老师可以开一个编译器的课程,编译器可太有意思了^_^
作者回复: 可以安排
2022-10-08归属地:湖北
收起评论