Поскольку мы знаем, что создание неисполняемого стека и области кучи виртуальной памяти может предотвратить выполнение вредоносного кода (например, шелл-кода) внутри памяти (метод называется Предотвращение выполнения данных). И самый простой способ внедрить вредоносный код внутрь памяти — это переполнить буфер. Таким образом, делая эти области памяти неисполняемыми, можно уменьшить серьезность атак переполнения.
Однако существует множество других методов, таких как рандомизация адресного пространства, защита указателей, использование канареек и т. д., которые используются для предотвращения таких атак. Я думаю, что большая часть системы использует эти другие методы вместо того, чтобы сделать память стека/кучи неисполняемой. (Пожалуйста, поправьте меня, если я ошибаюсь здесь)
Теперь мой вопрос: существуют ли какие-то конкретные операции или особые случаи, в которых части стека/кучи памяти должны быть исполняемыми?