[英]why does -D_FORTIFY_SOURCE=2 has no effect in my compilation?
我一直在添加一些“編譯標志”來激活我的二進制文件中的安全措施。 然后我使用checksec工具檢查這些措施是否已實施。 除了FORTIFY之外,我已經能夠激活所有這些。
我不斷得到
強化 = 否,強化 = 0,可強化 = 4
即使在使用-D_FORTIFY_SOURCE=2編譯之后,來自checksec的 output
我不得不說,我對許多二進制文件使用了一個通用的CMakeLists.txt ,並且我在全局add_compile_options部分添加了-D_FORTIFY_SOURCE=2 。
對於所有其他生成的二進制文件,宏具有預期的行為,即其他二進制文件得到“強化”。
我正在使用gcc 9.3.0 ,我的應用程序是用c++17編寫的,我用-O2編譯。
有人知道為什么我的二進制文件沒有得到強化嗎?
提前致謝。
由checksec腳本完成的強化是啟發式完成的:通過在 readelf readelf --dyn-syms
的 output 中查找_chk
符號。 所以它只能在以下情況下檢測到防御工事
memset
、 memcpy
等)的調用__OPTIMIZE__
已定義且大於零)gimple_fold_builtin_memory_chk
為了確定您的特定情況的確切原因,我們需要一個MVCE 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.