记录遇到的堆栈保护问题。

参考链接

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);

image-20181023114421863