C++ 未加固的波纹
我希望编译时不使用源代码强化(特别是,我希望避免使用*u chk函数) 据我所知,gcc/g++使用and进行这种强化,为了禁用and,应该使用and 然而,出于某种原因,这对rippled不起作用。我修改了SConstruct文件,以便添加上述定义和开关,并且在构建过程中,我看到它们实际上被传递到编译器和链接器。但是,当我运行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
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构建这些库可以解决这个问题。