gcc 保护内存不被更改

ifsvaxew  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(181)

有没有办法保护内存的某个区域?
我有这个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编译也可以,那也很好。
谢谢,贝可

fjaof16o

fjaof16o1#

要在运行时检测错误,请查看gcc中的-fstack-protector-all选项。当试图检测像您所描述的那样非常小的溢出时,它的用途可能有限。
不幸的是,你不会找到很多关于检测缓冲区溢出的信息,就像你在编译时描述的那样。从C语言的Angular 来看,语法是完全正确的,语言给了你足够的绳子来吊死自己。如果你真的想保护自己的缓冲区,你可以写一个数组访问的前端,在允许访问你想要的内存之前验证索引。

相关问题