![](/img/trans.png)
[英]-fstack-protector, -fstack-protector-all and -fmudflap
[英]How “-fstack-protector” and “FORTIFY” option are different?
這些天來,我正在尋找安全的編碼指南,並且有一個選項可以防止
緩沖區溢出。
一,
$gcc -fstack-protector -S test.c
$cat test.s
二,
$gcc -O -D_FORTIFY_SOURCE=1 test.c
我可以從FORTIFY選項中看到緩沖區溢出的警告,但是實際上我對-fstack-protector選項沒有太多的了解。
它們是否完全不同,並且對防止緩沖區溢出沒有任何作用?
-fstack-protector基本上創建所謂的canary-放在堆棧中的虛擬變量。 在函數退出時,將檢查變量。 如果被覆蓋,程序將退出並顯示錯誤消息。
_FORTIFY_SOURCE編譯時間定義是在打開優化功能時檢查代碼是否違反標准的定義。 因此,您在編譯時而不是在運行時會收到錯誤,就像使用-fstack-protector一樣。
當優化設置為1或更高級別時,_FORTIFY_SOURCE = 1啟用此功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.