代码审计--44--新篇章之C/C++代码审计(五)

本篇介绍了以下代码安全问题
1、错误的内存释放对象
2、二次释放
3、返回栈地址
4、返回栈地址:通过变量返回
5、越界访问
6、字符串缺少终止符
7、迭代器失效
8、对迭代器尾部进行解引用
9、缓冲区下溢
10、缓冲区上溢
11、内存泄漏

1、错误的内存释放对象

详细信息

释放的对象并非动态分配的内存,这种错误的释放操作会导致严重的错误。不要对不是由标准内存分配函数malloc(), calloc(), realloc(), 或 aligned_alloc()所返回的指针调用free()。

向realloc()提供一个指向非动态分配的指针也会产生类似的情况,realloc()函数用于改变一块动态内存的大小。如果向realloc()提供一个指向并非由标准内存分配函数分配的指针,程序行为未定义。结果导致程序异常终止。

例1:
这个不规范的代码样例,根据argc的值,设置c_str引用动态申请内存或非静态的string字符串。无论哪种情况,c_str都被当作参数传递给了free()。如果任何的其他不同于动态分配内存被c_str引用,在调用free(c_str)的时候都将出现错误。

#include <stdlib.h>
#include <string.h>

猜你喜欢

转载自blog.csdn.net/wutianxu123/article/details/103515229