26、CIL:用于分析和转换的中间语言及工具

CIL:用于分析和转换的中间语言及工具

StackGuard的改进实现

传统的StackGuard存在猜测金丝雀值的风险,并且即使对于没有局部数组变量的函数也会产生开销。改进后的StackGuard实现步骤如下:
1. 当函数被调用时(第28行),将当前返回地址压入私有栈。
2. 在函数返回之前(第15行),从私有栈中弹出之前保存的返回地址。
这里假设存在两个外部函数 get and push ra restore ra 来完成上述操作。并且,只有包含局部数组变量的函数才会被修改(第3 - 9行代码实现检查)。由于所有CIL函数都有显式返回(在第14行检查),这使得该转换过程得到简化。代码会使用CIL库例程(如访问器)。应用此转换后,只需在链接时提供保存和恢复返回地址的函数实现即可。如果在抽象语法树(AST)上执行此转换,会复杂得多,因为需要先进行一些CIL已经完成的详细处理。

确保C程序的内存安全

CCured是一个结合类型推断和运行时检查的系统,旨在使现有的C程序具备内存安全性。其工作流程如下:
1. 全程序分析 :对程序中类型的结构和使用进行全程序分析。
2. 类型和访问修改 :根据分析结果,修改程序中的类型定义和内存访问。
3. 运行时检查插入 :当无法静态验证内存引用的安全性时,插入适当的运行时检查。

分析过程涉及遍历程序中的所有类型,并使用一种结构相等性的形式来比较涉及类型转换的类型。CIL更简单的类型语言(递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值