C/C++ 代码安全(二)
来源:互联网 发布:企业级网络交换机 编辑:程序博客网 时间:2024/06/05 02:43
规则:声明的每一个对象都必须具有正确的存储期。对象的生命周期是程序执行的一部分,在此期间保证对象保留存储空间。任何形式的访问已经超出生命周期的行为都是未定义的。引用超出生命周期的对象,可能导致攻击者执行任意代码。规则:在使用前声明表示符,不要隐含类型。规则:不要声明具有冲突链接类别的表示符。规则:使用正确语法声明灵活数组成员,例如柔性数组。规则:避免在结构体填充中泄漏信息。例如从内核态到用户态,我们需要给因为内存对齐而产生的空挡一个填充,防止泄漏内核信息。解决方案:序列化填充,架构依赖,结构打包。规则:不要创建形同函数或者对象的不兼容声明。规则:不要在switch语句第一个标签之前声明变量。规则:不要依赖求值顺序以避免负作用。函数调用参数的求值顺序没有规定,可能以任何顺序发生。规则:不要通过非易失性引用访问易失性对象。volatile 不具有传递性。规则:不要读取未初始化的内存。如果具有自动存储持续时间的对象没有明确的初始化,其值是不确定的。规则:不要对NULL指针进行解引用,这是未定义行为,标准中尚未说明。规则:不要修改具有临时生命周期的对象。C11:修改临时生命周期的对象是未定义行为。规则:不要将指针转换为更严格对齐的指针类型。例如不同类型对象可能有不同的对齐,指针被转换为void在转换成别的类型,对齐规则会改变。解决方案:使用中间对象,使用C11 的alignas() 转换表示符。规则:不要通过不兼容类型的指针访问变量。规则:不要修改常量对象。规则:不要比较填充数据。不同情况下,填充数据并不确定是否都初始化。规则:使用restrict 限定的指针时避免未定义。指示指针访问的位移方式,同一个内存中有两个访问方式就会未定行为。规则:不要向sizeof _Alignof _Generic 传递有负作用的操作数。规则:不要在选择语句中执行赋值。
查看原文:http://zmrlinux.com/2016/08/27/cc-%e4%bb%a3%e7%a0%81%e5%ae%89%e5%85%a8%ef%bc%88%e4%ba%8c%ef%bc%89/
0 0
- C/C++ 代码安全(二)
- iOS安全攻防(二十三):Objective-C代码混淆
- iOS安全攻防(二十三):Objective-C代码混淆
- iOS安全攻防(二十三):Objective-C代码混淆
- iOS安全攻防(二十三):Objective-C代码混淆
- iOS安全攻防(二十三):Objective-C代码混淆
- C/C++ 代码安全(一)
- C/C++ 代码安全(三)
- C/C++ 代码安全(四)
- C/C++ 代码安全(五)
- 编写安全的C代码
- 编写安全无错C代码
- C代码优化方案(二)
- c/c++(二)
- 编写安全的Symbian C 游戏代码
- 编写安全的C/C++代码
- JNI(二)、 Java 代码调用 C代码
- C实现C(二)
- Linux——粘滞位(Sticky bit)
- 返回字符串的最长数字串
- HDOJ2069
- MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
- Js的函数及作用域问题
- C/C++ 代码安全(二)
- Android性能优化小结
- HTML可编辑的select
- the begin
- java内部类、静态内部类 小结
- casecade结构和HAAR检测流程
- Spinner + 适配器
- linux自学群565589971欢迎加入
- AutoCompleteTextView 自动提示的编辑框