2011-09-23 44 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

謝謝。那麼可以觸發一個信號嗎?我不知道如何,我們需要一點創造力。不要擔心表現。 –