КОМПИЛЯЦИЯ ИСПОЛНЯЕМОГО КОДА В МЕНЕЕ ДОВЕРЯЕМОМ АДРЕСНОМ ПРОСТРАНСТВЕ

1. В компьютеризированной среде, содержащей память, а также JIT-компилятор и одну или более прикладных программ, загруженных в память, способ выполнения управляемого кода, чтобы недоверяемый программный код мог компилироваться и выполняться способом, который не представляет опасности или иным образом подвергает риску безопасность системы, содержащий этапы, на которых
выполняют прикладную программу из первого адресного пространства, заданного с первым набором разрешений для доступа к совместно используемой динамически распределяемой памяти;
получают один или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке;
компилируют одно или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIT-компилятора, работающего во втором адресном пространстве, которое обладает вторым набором разрешений для доступа к совместно используемой динамически распределяемой памяти; и
передают заново скомпилированный код в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь и выполнить заново скомпилированный код из первого адресного пространства.
2. Способ по п.1, дополнительно содержащий действие, в котором при получении указания, что заново скомпилированный код передан в совместно используемую динамически распределяемую память, переключают уровень операций из режима ядра в режим пользователя.
3. Способ по п.2, дополнительно содержащий действие, в котором прикладная программа извлекает скомпилированный код и выполняет скомпилированный код из первого адресного пространства.
4. Способ по п.1, в котором первое адресное пространство конфигурируется с разрешениями чтения/выполнения относительно доступа к совместно используемой динамически распределяемой памяти, так что никакой компонент, работающий в первом адресном пространстве, не может записывать в совместно используемую динамически распределяемую память.
5. Способ по п.1, в котором второе адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/записи, так что никакой компонент, работающий во втором адресном пространстве, не может выполнять код в динамически распределяемой памяти.
6. Способ по п.1, в котором JIT-компилятор работает в режиме с большими привилегиями, а прикладная программа работает в режиме с меньшими привилегиями.
7. Способ по п.1, в котором JIT-компилятор ограничивается выполнением в рамках одного или более ограничений типовой безопасности, но конфигурируется для получения и компиляции кода на промежуточном языке, который не обладает типовой безопасностью.
8. Способ по п.7, в котором JIT-компилятор выполняет действия, в которых:
получают один или более запросов на выполнение функции, которая нарушает ограничение безопасности для JIT-компилятора; и
отклоняют один или более запросов на выполнение функции, или прекращают компиляцию одного или более множеств команд на промежуточном языке.
9. Способ по п.1, дополнительно содержащий действие, в котором при получении одного или более запросов от прикладной программы, активизируют уровень операций режима ядра.
10. Способ по п.9, в котором действие, при котором активизируют уровень операций режима ядра, включает в себя действие, при котором инициируют компонент безопасности в режиме ядра.
11. Способ по п.10, в котором один или более запросов от прикладной программы принимаются компонентом безопасности в режиме ядра.
12. Способ по п.11, дополнительно содержащий действие компонента безопасности в режиме ядра, при котором проверяют достоверность одного или более запросов от прикладной программы.
13. Способ по п.12, в котором действие, при котором проверяют достоверность одного или более запросов, содержит действие, при котором определяют, допустим ли дескриптор, включенный в один или более запросов.
14. В компьютеризированной среде, содержащей память, JIT-компилятор и одну или более прикладных программ, загруженных в память, способ формирования исполняемого компьютером программного кода способом, который использует JIT-компиляцию наряду с предотвращением нарушений безопасности, содержащий этапы, на которых
получают код прикладной программы, который включает в себя исполняемый код и код, который необходимо компилировать;
выполняют исполняемый код в режиме с меньшими привилегиями и в первом адресном пространстве;
идентифицируют один или более указателей в исполняемом коде по меньшей мере на некоторый код, который необходимо компилировать;
переключаются в режим с большими привилегиями; и
компилируют по меньшей мере некоторый код в другом адресном пространстве, используя компилятор, работающий в режиме с большими привилегиями.
15. Способ по п.14, в котором код прикладной программы содержит часть приложения видеоигр, которое принимается из хранения в операционную систему видеоигр.
16. Способ по п.14, в котором компилятор является JIT-компилятором с типовой безопасностью, сконфигурированным для обработки только запросов с типовой безопасностью, но иным образом сконфигурированным для компиляции кода на промежуточном языке с типовой безопасностью или без типовой безопасности.
17. Способ по п.14, в котором режим с большими привилегиями является уровнем операций режима ядра, и режим с меньшими привилегиями является пользовательским уровнем операций.
18. Способ по п.14, в котором первое адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/выполнения, а второе адресное пространство конфигурируется для доступа к динамически распределяемой памяти с разрешениями чтения/записи.
19. Способ по п.14, дополнительно содержащий действия, в которых
переключаются в режим с меньшими привилегиями после определения, что по меньшей мере некоторый код скомпилирован; и
выполняют скомпилированный по меньшей мере некоторый код в первом адресном пространстве.
20. В компьютеризированной среде, содержащей память, JIT-компилятор и одну или более прикладных программ, загруженных в память, изделие хранения компьютерной программы, имеющее записанные на нем исполняемые компьютером команды, которые при выполнении заставляют один или более процессоров выполнять способ, содержащий
выполнение прикладной программы из первого адресного пространства, заданного с первым набором разрешений для доступа к совместно используемой динамически распределяемой памяти;
получение одного или более запросов от прикладной программы на компиляцию одного или более множеств команд на промежуточном языке;
компиляцию одного или более множеств команд на промежуточном языке в заново скомпилированный код с использованием JIT-компилятора, работающего во втором адресном пространстве, которое обладает вторым набором разрешений для доступа к совместно используемой динамически распределяемой памяти; и
передачу заново скомпилированного кода в совместно используемую динамически распределяемую память, в которой прикладная программа может извлечь и выполнить заново скомпилированный код из первого адресного пространства.