我們正在研究使用金絲雀避免緩衝區溢出。爲什麼金絲雀對結構沒有幫助?
有一個問題是:
爲什麼在這個結構中不是有用的金絲雀?
struct test {
char arra[64];
int myVar;
}
我被卡住了。任何線索?
Pd。這是作業
我們正在研究使用金絲雀避免緩衝區溢出。爲什麼金絲雀對結構沒有幫助?
有一個問題是:
爲什麼在這個結構中不是有用的金絲雀?
struct test {
char arra[64];
int myVar;
}
我被卡住了。任何線索?
Pd。這是作業
我相信你的教授意味着它不會保護(肯定)從結構內的陣列的溢出。編譯器將該Canary值放置在您的結構和堆棧的結尾之間。如果你的數組溢出的數量少於int字節,溢出會破壞你的結構的int元素,而不是canary的值(這是因爲編譯器選擇的結構佈局不準確)。所以在這種情況下,溢出不會被發現並且可以被利用。
你在說關於stack canaries。直到現在我還沒有聽說過這個詞。據我所知,你會把int myVar放在char數組之前,但在WikiPedia的例子中,它是一個浮點數。
爲什麼不打開邊界檢查?儘管程序運行速度較慢,但是在C編譯器中的邊界檢查不是嗎?
Canaries應該放置在緩衝區溢出時,第一個被損壞的數據應該是canary,這樣我們才能對canary的值進行驗證檢查,並根據這個值設置溢出警報。但在這種情況下,我可以做這樣的事情,甚至沒有修改金絲雀myVar
的價值。
struct test t;
t.arra[100] = 1;
MyVar不是金絲雀。 – gnometorule 2011-12-18 15:01:39
綁定檢查不能很容易地與C廣泛使用的指針算術調和。你一定在想另一種語言。 – 2011-12-18 14:43:22