软件调试笔记36 - 栈和函数调用: 变量检查和Cookie

本文介绍了变量检查的原理,包括编译器如何通过屏障字段和变量描述表来确保代码安全性,并探讨了基于Cookie的安全检查机制及其应用场合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量检查原理

1. 在分配局部变量时编译器会为每个局部变量多分配8个字节的额外空间(前后各4个),用作屏障字段,在填充局部变量区域时,这些屏障字段以及变量尾部的因为内存对齐而分配的补足字节都会被INT3的机器码0xCC所填充。这些0XCC字节称为栅栏字节

2. 为了在运行期仍能够准确知道每个变量的长度,位置和名称,编译器会产生一个变量描述表,用来记录局部变量的详细信息。

3. 在函数返回前,调用_RTC_CheckStackVars函数,根据变量描述表逐一检查其中包含的每个变量,如果发现变量前后的栅栏字节发生变化则报告检查失败。


基于Cookie的安全检查

变量检查开销比较大,所以一般只用于调试版本。





报告安全检查失败



编写安全的代码



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值