W jaki sposób generowany w środowisku wykonawczym kod maszynowy (taki jak dane wyjściowe JIT) jest faktycznie wykonywany przez CPU, jeśli CPU / OS ma bit wyłączania wykonywania?
O ile mi wiadomo, wiele nowoczesnych procesorów i systemów operacyjnych obsługuje bit NX (w tym Intel i ARM), co uniemożliwia wykonanie kodu maszynowego przechowywanego pod dowolnym adresem innym niż sekcja kodu skompilowanego pliku binarnego. Jest to oczywiście dobra zaleta bezpieczeństwa, ponieważ zapobiega atakom polegającym na wstrzykiwaniu kodu powłoki.
Ale w jaki sposób omijają to silniki JIT, takie jak LLVM, które dynamicznie generują kod maszynowy?