...
- При сборке ПО не использовать параметр компиляции -z execstack. Этот параметр, передаваемый компоновщику. означает, что инструкции, расположенные в стеке, могут быть выполнены. Такое разрешение полностью снимает контроль над исполнением кода в стеке.
- Использовать при сборке программ опцию --no-trampolines, исключающий исключающую вариант обработки вложенных функция с помощью создания исполняемого кода в стеке (т. н. trampolinies). Подробнее см. Support for nested functions.
- Ошибка "cannot enable executable stack as shared object requires: Permission denied" возникает при попытке установки флага разрешения исполнения на область памяти, т.е. при попытке исполнения системного вызова mprotect(). Для предотвращения возникновения ошибки следует исключить такие вызовы. Для выявления попыток установки флага исполнения (выявления обращений к системному вызову mprotect()) в ходе исполнения программы использовать инструмент strace.