JIT del codice macchina e bit Esecuzione disabilitazione

10

Come è il codice macchina generato in runtime (come l'output di un JIT), effettivamente eseguito dalla CPU se la CPU / OS ha un bit di Execution Disable?

Per quanto ne so, molti processori e sistemi operativi moderni includono il supporto per un bit NX, (inclusi Intel e ARM), che impedisce il codice macchina memorizzato su qualsiasi indirizzo altro rispetto al codice sezione di un binario compilato da esecuzione. Chiaramente, questo è un vantaggio di sicurezza, perché impedisce gli attacchi di iniezione del codice shell.

Ma come fanno i motori JIT, come LLVM, che generano dinamicamente il codice macchina, per aggirare questo?

    
posta Siler 08.09.2014 - 20:45
fonte

1 risposta

6

Su Linux e su molti sistemi Posix, un'applicazione può cambiare la protezione di alcuni intervalli del spazio indirizzo < a href="http://en.wikipedia.org/wiki/Virtual_memory"> memoria virtuale utilizzando mmap (2) e mprotect (2) chiamate di sistema.

Quindi il motore JIT potrebbe usare queste (probabilmente prima emissione del codice macchina, ma forse dopo esso).

BTW, su alcune architetture, potrebbe essere necessario informare la cache della CPU sui nuovi segmenti di codice macchina disponibili, ad es. __builtin_clear_cache di GCC.

    
risposta data 08.09.2014 - 21:09
fonte

Leggi altre domande sui tag