Неукрепляющий волнистый

Я хочу скомпилировать rippled без усиления исходного кода (в частности, я хочу избежать функций *_chk).

Насколько я смог определить, gcc/g++ делают это укрепление с помощью FORTIFY_SOURCE и -fstack-protector, а чтобы его отключить, либо -U_FORTIFY_SOURCE или -D_FORTIFY_SOURCE=0 и -fno-stack-protector.

Однако по какой-то причине это не работает для меня с рифленым. Я модифицировал файл 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, но я просто отбрасываю эту опцию, так как не хочу изменять код rippled (и, тем не менее, это повлияет только на подмножество функций, насколько я могу рассказать).


person Ginswich    schedule 06.07.2016    source источник
comment
Похоже, это связано с тем, что я делаю статическую ссылку. При динамической компоновке работает корректно (в ELF не включены символы *_chk). Поэтому я предполагаю, что эти символы наследуются через некоторые статически связанные библиотеки (какой-нибудь способ определить, какая библиотека их использует?). Вероятно, сборка этих библиотек с параметрами -U_FORTIFY_SOURCE и -fno-stack-protector решит проблему.   -  person Ginswich    schedule 06.07.2016