> Если интерпретатор или любая прога изменяет исполняемую область памяти я не знаю
> как гарантировать неизменность исполняемой программы. Просто констатирует,что на проце
> выполняется не то что загрузили с диска. Это создаёт проблему для безопасности.Только вот ROP (которому все равно для запуска нужны, плюс-минус, те же условия, что и "классическому", адресонезависимому, инжектнутому машкоду и который [уязвимость к ROP] вообще-то уже 10 лет назад собирались выпилить: https://www.csc2.ncsu.edu/faculty/xjiang4/pubs/EUROSYS10.pdf, но не судьба[1]) не требует изменять исполняемую область памяти, позволяя атакующему выполнять свой код в обход.
Поэтому гарантии неизменности кода могут быть только при полном отсутствии разешения на запись вообще, для всех страниц.
____________
[1]Видимо, потому что тогда придется заменять не только RET, но и все разновидности вида "POP REG, JMP REG == последовательности в 3 байта для x86", которых в достаточно большом бинарнике-библиотеке достаточно.
Самое смешное - достаточно было бы отказаться от самой возможности смешивания обычных данных и адресов возврата, чтобы закрыть эту дырищу без оверхеда.
ЗЫ: На десктопе/ноуте все равно нужно будет внести самую главную дыру современности -- браузер, в исключения [из PaX].
И толку тогда, мудохаться с исключениями и подстройкой правил (а они могут быть неочевидными, например работа граф. пайплайна для игрушек, эмуляторов и прочего - когда я последний раз тыкал это дело, тот же konsole из КДЕ не запускался) …