Есть ли в Linux альтернатива библиотеке gcc stack-protector / fortify source?

Есть ли внешняя библиотека / подход / что добавить?

  1. защита от канареек (эквивалент стек-протектора)
  2. дополнительная проверка границ буфера (фортифицируйте эквивалент источника)

программное обеспечение на C без использования встроенной функциональности glibc / gcc (source-protector / fortify source)?

1 ответ

Решение

Защита стека не имеет ничего общего с glibc; Вы просто должны предоставить символ __stack_chk_fail который будет вызван кодом проверки канарейки, сгенерированным GCC. (Если вы генерируете независимый от позиции код, вам также необходимо __stack_chk_fail_local который имеет скрытую видимость и, следовательно, может вызываться без инициализации указателя GOT.) Вам также необходимо убедиться, что канарейка доступна и инициализирована; в зависимости от используемой архитектуры /ABI, это может быть в глобальном __stack_chk_guard или с определенным фиксированным смещением от указателя потока (%gs:0 на х86).

Что касается _FORTIFY_SOURCEВы можете воспроизвести эквивалент с помощью встроенных функций GCC, аналогично тому, как это делают заголовки glibc. Это можно сделать как независимый слой, отдельный от заголовков libc, через GCC #include_next Функция и вторичный каталог включают в себя стандартные заголовки, не зависящие от конкретной используемой реализации libc. Насколько я знаю, такой реализации в настоящее время не существует, но мы очень хотим использовать ее с musl libc. Вы можете попытаться связаться с нашей командой разработчиков / сообществом и посмотреть, заинтересован ли кто-нибудь в том, чтобы помочь вам поработать над этим или расставить приоритеты в разработке таких заголовков.

Другие вопросы по тегам