Я хочу скомпилировать рифленый без усиления исходного кода (в частности, я хочу избежать функций * _chk).
Насколько я смог определить, gcc / g ++ делает это с помощью FORTIFY_SOURCE а также -fstack-протектор, и для того, чтобы отключить его, либо -U_FORTIFY_SOURCE или -D_FORTIFY_SOURCE = 0 а также -FNo стек-протектор должен быть использован.
Однако по некоторым причинам это не работает для меня с рифленым. Я изменил файл 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» являются альтернативой -U_FORTIFY_SOURCE и -fno-stack-protector, но я просто отбрасываю эту опцию, так как я не хочу изменять код рифленого кода (и, однако, это повлияет только на подмножество функций, насколько я могу судить).
Задача ещё не решена.
Других решений пока нет …