不强化的波纹

时间:2016-07-06 11:45:28

标签: c++ c fortify-source

我想在没有源代码强化的情况下编译rippled(具体来说,我想避免使用* _chk函数)。

据我所知,gcc / g ++使用FORTIFY_SOURCE-fstack-protector进行强化,为了禁用它,-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0和{{3}应该使用。

然而,出于某种原因,这对我来说并不起作用。我修改了SConstruct文件,以便添加上面提到的定义和开关,我在构建过程中看到它们实际上是传递给编译器和链接器的。但是,当我运行readelf -sW rippled | egrep chk时,我会获得以下几行:

     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __printf_chk@GLIBC_2.3.4 (2)
    38: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __vfprintf_chk@GLIBC_2.3.4 (2)
    96: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __sprintf_chk@GLIBC_2.3.4 (2)
   100: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __snprintf_chk@GLIBC_2.3.4 (2)
   107: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __fread_chk@GLIBC_2.7 (14)

所以我猜测问题不在于交换机和定义。但在那种情况下,我可能会失踪什么?为什么这些符号仍然包含在ELF中?

PS:我知道-fno-stack-protector调用" _chk" -able函数是-U_FORTIFY_SOURCE和-fno-stack-protector的替代品,但我只是放弃了该选项,因为我不想修改波纹的代码(但是,据我所知,这只会影响函数的一个子集。)

0 个答案:

没有答案