记录遇到的堆栈保护问题。
参考链接
https://www.cnblogs.com/napoleon_liu/archive/2011/02/14/1953983.html
https://blog.csdn.net/lhl_blog/article/details/70193865
在大型软件中堆栈溢出可能导致踩到其他程序内存,导致crash。
##1.GCC 4.1 中三个与堆栈保护有关的编译选项
-fstack-protector:
启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码。
-fstack-protector-all:
启用堆栈保护,为所有函数插入保护代码。
-fno-stack-protector:
禁用堆栈保护。
GCC 中的 Canaries 探测
##2 项目实例
如下代码为在项目中遇到的,分析数组c,数组大小为10,在运行过程中,cnt作为图像编号,转换为字符串写入c,然后字符连接“-avgimg.raw”,例如最终连接字符串“1-avgimg.raw“,字符长度已经打到了13,很明显数组缓冲区溢出了,在运行时包错如下错误。
char c[10];
sprintf(c, "%d", cnt);
write_file(strcat(c,"-avgimg.raw"), temp_avgimg, width*height);