memcpy/strcpy/system/random/printf等
为什么不安全?有的是溢出风险,但是如果小心地使用是不是就可以了呢?
printf
原文链接:https://blog.csdn.net/a369414641/article/details/47447193
打印的时候,printf按照字符转换说明符规定的格式从低地址开始提取数据,直到参数打印完。
比如遇到 %f 说明符就提取8个字节的数据,遇到 %d 就提取4个字节。printf()其实不知道参数的个数,它只会根据format中的打印格式的数目依次打印堆栈中参数format后面地址的内容。
这样一来,printf()其实存在安全隐患——没错,它会强行读取内存的数据当作正常数据输出,没有边界检测————很有可能产生堆溢出!
strcpy
原文链接:https://blog.csdn.net/kadwf123/article/details/7819052
函数原型为char *strcpy(char *dest,const char *src);
函数说明:strcpy函数会将参数src字符串拷贝至参数dest所指的地址。
参数说明:dest,我们说的出参,最终得到的字符串。src,入参,因为其有const修饰。表示在此函数中不会也不能修改src的值。
返回值:返回dest字符串的起始地址。
附加说明:如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况。
特别强调:此函数很好用,可是它也很危险。如果在用的时候加上相关的长度判断,则会大大降低出此错误的危险。此函数还有一个特点,就是它在把字符串b拷贝到字符串a的时候,会在拷贝的a字符串的末尾加上一个