有没有办法保护内存的某个区域?
我有这个struct:
#define BUFFER 4
struct
{
char s[BUFFER-1];
const char zc;
} str = {'\0'};
printf("'%s', zc=%d\n", str.s, str.zc);
它应该操作长度为BUFFER-1的字符串,并保证它以'\0'结尾。
但编译器仅在以下情况下出错:
str.zc='e'; /*error */
如果:
str.s[3]='e'; /*no error */
如果用gcc和一些flag编译也可以,那也很好。
谢谢,贝可
1条答案
按热度按时间fjaof16o1#
要在运行时检测错误,请查看gcc中的-fstack-protector-all选项。当试图检测像您所描述的那样非常小的溢出时,它的用途可能有限。
不幸的是,你不会找到很多关于检测缓冲区溢出的信息,就像你在编译时描述的那样。从C语言的Angular 来看,语法是完全正确的,语言给了你足够的绳子来吊死自己。如果你真的想保护自己的缓冲区,你可以写一个数组访问的前端,在允许访问你想要的内存之前验证索引。