2014-11-25 35 views
0

這幾天我正在尋找安全編碼指南,並且有一個選項可以防止緩衝區溢出「-fstack-protector」和「FORTIFY」選項有何不同?

緩衝區溢出。

之一,

$gcc -fstack-protector -S test.c 
$cat test.s 

兩個

$gcc -O -D_FORTIFY_SOURCE=1 test.c 

我可以看到從強化選項緩衝區溢出的警告,但其實我沒有-fstack保護器選項的多少想法。

它們是否完全不同並且沒有任何防止緩衝區溢出的效果?

回答

0

-fstack-protector基本上創建了所謂的金絲雀 - 放置在堆棧中的虛擬變量。在函數退出時,檢查變量。如果覆蓋程序退出並顯示錯誤消息。

_FORTIFY_SOURCE編譯時定義是在開啓優化時檢查標準違規的代碼。所以你在編譯時而不是在運行時得到一個錯誤,就像你使用-fstack-protector一樣。

_FORTIFY_SOURCE = 1將優化設置爲1級或更高時開啓此功能。

+0

感謝您的回答:D – 2014-11-26 03:01:00

相關問題