2016-09-07 3 views
1

Большинство зрелых компиляторов, по-видимому, имеют хорошую поддержку стековых переменных clobbers.эквивалент стека в компиляторе clang?

Для лязгом я нашел -fsanitize=safe-stack, но он не поддерживает разделяемые библиотеки , что делает его в значительной степени бесполезным для меня.

Похоже, что дезинфицирующее средство реализовано как дополнение? Кто-нибудь знает, имеет ли clang какую-либо альтернативную (встроенную?) Поддержку анти-разбиения стека, которая не имеет ограничения на разделяемую библиотеку, или если есть планы обобщить существующую ограниченную реализацию безопасного стека, чтобы догнать все остальные компиляторы?

ответ

2

Вы хотите найти скрытые ошибки памяти в своем приложении или затвердеть для использования в целях производства? Для первого вы можете пойти с -fsanitize=address, который доступен как в GCC, так и в Clang, обеспечивает отличное обнаружение переполнения буфера и может применяться к частям вашей программы (в этом случае вы не обнаружите все ошибки). Он не подходит для использования в производстве, хотя имеет 2-кратное снижение производительности и делает программу более уязвимой для внешних атак.

2

лязгом поддержка ССЗ -fstack-protector вариант:

:: clang --help | grep stack-protector 
-fno-stack-protector Disable the use of stack protectors 
-fstack-protector-all Force the usage of stack protectors for all functions 
-fstack-protector-strong 
-fstack-protector  Enable stack protectors for functions potentially vulnerable to stack smashing 

И я считаю, что следует, что делает здесь GCC.