Как машинный код, сгенерированный во время выполнения (такой как вывод JIT), фактически выполняется ЦП, если ЦПУ / ОС имеет бит Отключение выполнения?
Насколько я знаю, многие современные процессоры и операционные системы включают поддержку для NX бит (включая Intel и ARM), защищающие машинный код , который хранится в любом адресе другой , чем секции коды скомпилированного двоичного файла из выполняются. Понятно, что это хорошее преимущество в плане безопасности, потому что оно предотвращает атаки с внедрением шелл-кода.
Но как JIT-движки, такие как LLVM, которые динамически генерируют машинный код, справляются с этим?