Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未加固的波纹_C++_C_Fortify Source - Fatal编程技术网

C++ 未加固的波纹

C++ 未加固的波纹,c++,c,fortify-source,C++,C,Fortify Source,我希望编译时不使用源代码强化(特别是,我希望避免使用*u chk函数) 据我所知,gcc/g++使用and进行这种强化,为了禁用and,应该使用and 然而,出于某种原因,这对rippled不起作用。我修改了SConstruct文件,以便添加上述定义和开关,并且在构建过程中,我看到它们实际上被传递到编译器和链接器。但是,当我运行readelf-sW rippled | egrep chk时,我会得到如下几行代码: 3: 0000000000000000 0 FUNC GL

我希望编译时不使用源代码强化(特别是,我希望避免使用*u chk函数)

据我所知,gcc/g++使用and进行这种强化,为了禁用and,应该使用and

然而,出于某种原因,这对rippled不起作用。我修改了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:我知道调用“_chk”-able函数是-U_FORTIFY_SOURCE和-fno stack protector的替代方法,但我只是放弃了这个选项,因为我不想修改rippled的代码(但是,据我所知,这只会影响函数的一个子集).

这似乎与我正在进行静态链接有关。通过动态链接,它可以正常工作(ELF中不包含*chk符号)。因此,我假设这些符号是通过一些静态链接库“继承”的(有没有办法确定哪个库正在使用它们?)。也许,使用-U_-FORTIFY_-SOURCE和-fno-stack-protector构建这些库可以解决这个问题。