2011-09-23 41 views
0

有没有办法保护内存区域?保护内存不被改变

我有这样的结构:

#define BUFFER 4 
struct 
{ 
    char s[BUFFER-1]; 
    const char zc; 
} str = {'\0'}; 

printf("'%s', zc=%d\n", str.s, str.zc); 

它应该运行lenght BUFFER-1的字符串,garantee它在 '\ 0' 结束。

但是编译器只为给错误:

str.zc='e'; /*error */ 

若:

str.s[3]='e'; /*no error */ 

如果用gcc编译和一些标志可能会做,这是很好的为好。

感谢, 贝乔

+0

http://en.wikipedia.org/wiki/Memory_protection – 2011-09-23 17:19:32

+0

谢谢。我现在要看看。 –

+0

@VladLazarenko我没有看到一种方法来保护结构中的单个字节,就像问题中指出的那样。只通过寄存器保护页面。 –

回答

0

为了检测在运行时错误看一看在GCC的-fstack保护器 - 所有选项。当试图检测非常小的溢出像你所描述的溢出时,它的使用可能有限。

不幸的是,你不会找到很多有关检测缓冲区溢出场景的信息,比如你在编译时描述的场景。从C语言的角度来看,这个语法是完全正确的,而且这种语言给了你足够的绳索来让自己与之挂钩。如果你真的想保护自己的缓冲区,你可以写一个前端数组访问来验证索引,然后它允许访问你想要的内存。

+0

谢谢。那么可以触发一个信号吗?我不知道如何,我们需要一点创造力。不要担心表现。 –