保护记忆不被改变

时间:2011-09-23 17:17:47

标签: gcc const protection

有没有办法保护记忆区域?

我有这个结构:

#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和某些标志进行编译可能会这样做,那也很好。

谢谢, 贝乔

1 个答案:

答案 0 :(得分:0)

要在运行时检测错误,请查看gcc中的-fstack-protector-all选项。尝试检测非常小的溢出时,它可能用途有限。

不幸的是,您不会发现有关检测缓冲区溢出方案的大量信息,例如您在编译时描述的情况。从C语言的角度来看,语法是完全正确的,语言为您提供了足够的绳索。如果你真的想要保护你自己的缓冲区,你可以编写一个前端到数组访问,在它允许访问你想要的内存之前验证索引。