簡體   English   中英

“ -fstack-protector”和“ FORTIFY”選項有何不同?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM