有没有办法保护记忆区域?
我有这个结构:
#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和某些标志进行编译可能会这样做,那也很好。
谢谢, 贝乔
答案 0 :(得分:0)
要在运行时检测错误,请查看gcc中的-fstack-protector-all选项。尝试检测非常小的溢出时,它可能用途有限。
不幸的是,您不会发现有关检测缓冲区溢出方案的大量信息,例如您在编译时描述的情况。从C语言的角度来看,语法是完全正确的,语言为您提供了足够的绳索。如果你真的想要保护你自己的缓冲区,你可以编写一个前端到数组访问,在它允许访问你想要的内存之前验证索引。