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