Есть ли в Linux альтернатива библиотеке gcc stack-protector / fortify source?
Есть ли внешняя библиотека / подход / что добавить?
- защита от канареек (эквивалент стек-протектора)
- дополнительная проверка границ буфера (фортифицируйте эквивалент источника)
программное обеспечение на 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. Вы можете попытаться связаться с нашей командой разработчиков / сообществом и посмотреть, заинтересован ли кто-нибудь в том, чтобы помочь вам поработать над этим или расставить приоритеты в разработке таких заголовков.