openrefactory/c之添加整数类型(七)
来源:互联网 发布:淘宝互刷平台 编辑:程序博客网 时间:2024/06/05 07:45
aic(添加整数类型)转换是更准确的说是面向安全的程序转换,修复C中的整数漏洞问题。
一个添加整数类型(Add Integer Cast)的例子如下:
//aic转换前 21 ... 22 short data=-1; 23 if (data < 100) { 24 memcpy(dest,src,data); 25 ...
//aic转换后 21 ... 22 short data=-1; 23 if ((unsigned int)data < 100) { 24 memcpy(dest,src,data); 25 ...
在aic转换前,第24行的语句是会执行时,将data“看成”无符号数,而short型-1在计算机中以补码存储时候是1111 1111。会导致dest溢出,即由整数漏洞引起程序行为错误。
在aic转换后,(unsigned int)data大于100无法通过条件检查,从而避免了一个字符串拷贝错误。
在执行aic转换前,程序员选定一个整形变量调用aic转换,以下前提条件将被检查:
1. 该变量必须是整形的或是指向整形变量的指针;
2. 变量的应用是在一个不安全的上下文,例如memcpy中,控制语句,数组访问表达式或是返回值语句。
注意:aic转换不保证对程序产生一个改变,仅仅意味这发生转换的地方需要更多更深入的调研。例如,以上转换在控制语句处修复了一个整数漏洞,如果对memcpy的第三个参数data也进行aic转换,则这个转换只能是提醒程序员注意到C语言的弱类型系统,即对函数形参的aic转换并不能实质改变程序的行为。
0 0
- openrefactory/c之添加整数类型(七)
- openrefactory/c笔记之添加本地变量(三)
- openrefactory/c之添加自反任务(四)
- openrefactory/c之移动表达式(五)
- openrefactory/c之移除无用表达式(六)
- openrefactory/c笔记 (一)
- openrefactory/c笔记(二)
- 七、基本数据类型-整数类型
- (七)struts2之自定义类型转换器
- 【Java】基本类型之整数类型(二)
- 【Java】基本类型之浮点类型(七)
- java笔记之整数类型
- java数据类型之整数类型
- 七步入门CMake之第二步(添加库)
- OpenGL之路(七)为立方体添加丰富色彩
- web开发(七)之struts2跳转类型
- Python笔记(七)--变量类型之字典
- Objective-C数量类型-Objective-C int 整数类型
- oracle update set 使用case when语句
- gridview表头固定(经验篇)
- 简单仿照主流新闻客户端界面一(基本框架搭建)
- Eclipse Android SDK无法下载问题不翻墙解决办法
- 20150713,关于C。
- openrefactory/c之添加整数类型(七)
- android https通信跟服务器配置说明
- 在WIN32 DLL中使用MFC
- do while(0)的另一个用途:消除goto语句
- C语言基础问题1 数据在内存上的表现形式
- maven使用过程中遇见的bug_me
- 黑马程序员 其他对象 I/O
- php设计模式之装饰器模式
- Linux启动新进程的几种方法及比较