Способ выполнения кода интерпретатором
Иллюстрации
Показать всеИзобретение относится к области выполнения кода интерпретатором. Техническим результатом является улучшение качества выполнения интерпретатором исследуемого программного кода путем интерпретации вспомогательного программного кода и обеспечение выполнения интерпретатором инструкций исследуемого программного кода, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого интерпретатора путем интерпретации вспомогательного программного кода. Раскрыт реализуемый компьютером способ выполнения программного кода интерпретатором, в котором: а) последовательно выполняют каждую инструкцию исследуемого кода; б) когда интерпретатор переходит к выполнению инструкции исследуемого кода, содержащей неизвестный объект, для которого у интерпретатора отсутствует правило интерпретации, приостанавливают дальнейшее выполнение исследуемого кода, при этом объект является одним из: процедурой; экземпляром класса; методом или переменной экземпляра класса; сценарием; файлом; в) получают вспомогательный код, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код содержит известные объекты, для которых в интерпретаторе присутствует правило интерпретации; г) последовательно выполняют каждую инструкцию вспомогательного кода; и д) после завершения выполнения вспомогательного кода возобновляют выполнение исследуемого кода на шаге б) со следующей инструкции исследуемого кода, пока не будет выполнена последняя инструкция исследуемого кода. 7 з.п. ф-лы, 4 ил., 6 табл.
Реферат
Область техники
Изобретение относится к интерпретаторам, а более конкретно к способам выполнения кода интерпретатором.
Уровень техники
Для анализа кода на наличие вредоносного функционала все чаще используются эмуляторы. В частности, таким способом обычно анализируется код, написанный на сценарных языках программирования. В общем случае эмулятор включает синтаксический анализатор (англ. parser) и интерпретатор. Синтаксический анализатор преобразовывает анализируемый программный код в промежуточный код (например, байт-код). Интерпретатор, используя промежуточный код и среду выполнения, последовательно выполняет (интерпретирует) инструкции промежуточного кода в соответствии с правилами интерпретации. Во время эмуляции у анализируемого кода нет доступа к ресурсам реального компьютера, т.к. его выполнение происходит в эмулируемой среде. Таким образом, выполняемый в эмуляторе анализируемый код не сможет удалить или изменить файлы на компьютере, считать данные из файлов и другим образом нанести ущерб компьютерной системе.
В то же время достаточно сложно реализовать эмулятор, который мог бы интерпретировать все объекты (функции, процедуры и методы, экземпляры классов и т.д.) выполняемого кода. Злоумышленники пользуются этим фактом и часто включают в свой программный код редко используемые объекты. Поэтому, если возвращаемое значение какой-либо функции не соответствует ожидаемому значению выполнения этой функции, вредоносный код «понимает», что он исполняется внутри эмулятора и прекращает свое дальнейшее исполнение или же не исполняет вредоносный функционал, чтобы не быть обнаруженным.
В свою очередь, производители антивирусных приложений стремятся оперативно добавлять в эмулятор правила интерпретации для новых объектов, включаемых злоумышленниками в свой вредоносный код. Однако для этого обычно требуется изменение программного кода самого эмулятора. После каждого такого изменения требуется тестирование и отладка программного кода эмулятора, и, таким образом, обновленная версия эмулятора не может быть оперативно предоставлена пользователям антивируса. Возникает техническая проблема, заключающаяся в необходимости интерпретации (т.е. выполнения интерпретатором) инструкций исследуемого программного кода, содержащих объекты, для которых у интерпретатора отсутствует правило интерпретации (т.е. программный код, результат выполнения которого соответствует результату выполнения соответствующей инструкции), без изменения самого программного кода интерпретатора. Объектом может быть процедура, экземпляр класса, метод или переменная экземпляра класса, сценарий или даже файл. Сценарий также называют скриптом (англ. script).
В работе (Min Gyung Kang et al., 2009)1 (1 Min Gyung Kang, Heng Yin, Steve Hanna, Stephen McCamant, Dawn Song. Emulating Emulation-Resistant Malware. VMSec'09, November 9, 2009, Chicago, Illinois, USA.) описан способ эмуляции кода, затрудняющего свою эмуляцию. Анализируемый код выполняется на эмуляторе и в так называемой «базовой системе» (англ. reference platform). Базовая система, в отличие от эмулятора, непригодна для анализа кода, однако она наиболее точно соответствует реальной компьютерной системе. На основе сравнения результатов выполнения на эмуляторе и в базовой системе определяют инструкции, после которых происходит расхождение в выполнении кода. Таким образом, найденные инструкции соответствуют коду, затрудняющему эмуляцию.
Однако описанный способ не позволяет выполнить инструкции кода, содержащие объекты, для которых у эмулятора (интерпретатора) отсутствует правило интерпретации и, таким образом, не решает упомянутую техническую проблему.
Раскрытие сущности изобретения
Технический результат заключается в улучшении качества выполнения интерпретатором исследуемого программного кода путем интерпретации вспомогательного программного кода.
Технический результат заключается в обеспечении выполнения интерпретатором инструкций исследуемого программного кода, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого интерпретатора путем интерпретации вспомогательного программного кода.
Согласно варианту реализации используется реализуемый компьютером способ выполнения программного кода интерпретатором, в котором: последовательно выполняют каждую инструкцию исследуемого кода; когда интерпретатор переходит к выполнению инструкции исследуемого кода, содержащей неизвестный объект, для которого у интерпретатора отсутствует правило интерпретации, приостанавливают дальнейшее выполнение исследуемого кода, при этом объект является одним из: процедурой; экземпляром класса; методом или переменной экземпляра класса; сценарием; файлом; получают вспомогательный код, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код содержит известные объекты, для которых в интерпретаторе присутствует правило интерпретации; последовательно выполняют каждую инструкцию вспомогательного кода; и после завершения выполнения вспомогательного кода возобновляют выполнение исследуемого кода на втором шаге со следующей инструкции исследуемого кода, пока не будет выполнена последняя инструкция исследуемого кода.
Согласно одному из частных вариантов реализации инициализируют среду выполнения интерпретатора.
Согласно другому частному варианту реализации вспомогательный код содержится в среде выполнения интерпретатора и на третьем шаге вспомогательный код получают из среды выполнения интерпретатора.
Согласно еще одному частному варианту реализации вспомогательный код получают из локальной базы.
Согласно одному из частных вариантов реализации инициализируют среду выполнения интерпретатора для вспомогательного кода.
Согласно другому частному варианту реализации получают упомянутый вспомогательный код из удаленной базы, когда упомянутый вспомогательный код отсутствует в локальной базе.
Согласно еще одному частному варианту реализации выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ, синтаксический анализ, создание промежуточного кода и интерпретацию промежуточного кода согласно правилам интерпретации.
Согласно одному из частных вариантов реализации вспомогательный код дополнительно содержит по меньшей мере один другой неизвестный объект, для которого получают другой вспомогательный код, результат выполнения упомянутого другого вспомогательного кода соответствует результату выполнения другого неизвестного объекта.
Краткое описание чертежей
Дополнительные цели, признаки и преимущества настоящего изобретения будут очевидными из прочтения последующего описания осуществления изобретения со ссылкой на прилагаемые чертежи, на которых:
Фиг. 1 представляет общий вид системы настоящего изобретения.
На Фиг. 2 представлена подробная схема эмулятора.
На Фиг. 3 представлен способ осуществления настоящего изобретения.
Фиг. 4 представляет пример компьютерной системы общего назначения.
Осуществление изобретения
Объекты и признаки настоящего изобретения, способы для достижения этих объектов и признаков станут очевидными посредством отсылки к примерным вариантам осуществления. Однако настоящее изобретение не ограничивается примерными вариантами осуществления, раскрытыми ниже, оно может воплощаться в различных видах. Сущность, приведенная в описании, является ничем иным, как конкретными деталями, обеспеченными для помощи специалисту в области техники в исчерпывающем понимании изобретения, и настоящее изобретение определяется в объеме приложенной формулы.
Фиг. 1 представляет общий вид системы настоящего изобретения. Антивирус 101 является компьютерным приложением обеспечения информационной безопасности и передает анализируемый исходный программный код 102 эмулятору 200. В частном варианте реализации эмулятор 200 является частью антивируса 101. Исходный программный код 102 может быть написан на сценарном (скриптовом) языке программирования, таком как JavaScript, VB Script, Python и др. Эмулятор 200 включает в себя лексический анализатор 103, синтаксический анализатор 104, семантический анализатор 105 и генератор промежуточного кода 106. Основой эмулятора 200 является интерпретатор 107. Интерпретатор 107 связан со средством журналирования 115 и средством анализа 113. В частном варианте реализации интерпретатор 107 содержит виртуальную машину.
Лексический анализатор 103 считывает поток символов, составляющих исходный программный код 102, и группирует эти символы в значащие последовательности - лексемы. Для каждой лексемы строится выходной токен, который передается синтаксическому анализатору 104. Синтаксический анализатор 104 использует токены для создания древовидного промежуточного кода, описывающего грамматическую структуру потока токенов - синтаксическое дерево. Семантический анализатор 105 использует синтаксическое дерево для проверки исходного программного кода на семантическую согласованность с определением языка. Генератор промежуточного кода 106 создает промежуточный код, который получает на вход интерпретатор 107. Промежуточный код является единым вне зависимости от языка, на котором написан исходный код 102.
Выполнение кода в интерпретаторе 107 (или, что то же самое - интерпретация) происходит в среде выполнения 110. Среда выполнения 110 (англ. run-time environment) решает вопросы схемы размещения и памяти для именованных объектов выполняемого кода, предоставляет механизмы для доступа к переменным, связи между процедурами, механизмы передачи параметров, взаимодействие с операционной системой, устройствами ввода-вывода и другими программами. Соответственно инициализация среды выполнения 110 заключается в выделении памяти и в предоставлении доступа к переменным и данным интерпретатору 107. Следует отметить, что интерпретатор 107 может выполнять лишь промежуточный код, созданный генератором промежуточного кода 106. Для удобства изложения понятия исследуемый код и промежуточный код считаются равнозначными. Промежуточный или исследуемый код является машинно-независимым кодом (будет выполнен интерпретатором для различных компьютерных архитектур). Таким образом, вне зависимости от языка программирования, на котором был написан исходный код 102, в результате работы лексического, синтаксического и семантического анализаторов 103-105 и генератора промежуточного кода 106 будет создан исследуемый код единой языковой грамматики, который сможет выполнить интерпретатор 107.
Локальная база 111 связана со средой выполнения 110 и содержит правила интерпретации для объектов исследуемого кода. В частном варианте реализации объект является одним из: процедурой, экземпляром класса, методом или переменной экземпляра класса. В еще одном частном варианте реализации исследуемый код может содержать вложенный участок кода сценария 109, а также код для работы с файлами 108, которые также являются объектами. В этом случае выполнение кода интерпретатором 107 будет происходить рекурсивно. Сценарий также называют скриптом (англ. script). Вложенный сценарий, например, не преобразован в промежуточный код и, следовательно, не может быть выполнен интерпретатором 107. Таким образом, вложенный сценарий 109 необходимо будет заново отправить лексическому анализатору 103, чтобы генератор промежуточного кода 106 создал промежуточный код, который будет исполнен интерпретатором 107.
Если в процессе исполнения исследуемого кода был сохранен файл на диск 108, содержимое этого файла также может быть выполнено интерпретатором 107. Однако содержимое файла содержит непреобразованный код, поэтому файл будет передан антивирусу 101 с последующим преобразованием кода модулями 103-106 к промежуточному коду.
Стоит отметить, что настоящее изобретение в первую очередь предназначено для выполнения антивирусной проверки кода. Однако стоит также подчеркнуть, что изобретение не ограничивается областью компьютерной безопасности и может быть применено в любой другой области компьютерной техники, где может быть использовано выполнение кода интерпретатором, например, для упрощения способа обновления правил интерпретации в интерпретаторе кода.
Интерпретатор 107 может быть дополнительно связан со средством журналирования 115, которое может производить запись в журнал интерпретатора 114 в ходе выполнения каждой инструкции промежуточного кода в интерпретаторе 107.
Средство анализа 113 предназначено для проверки записей журнала интерпретатора 114 на совпадение с записями базы антивирусных записей 112 согласно антивирусным правилам. Антивирусные правила задают условия, при которых исследуемый файл признается вредоносным или не вредоносным. При совпадении указанных записей исследуемый код определяется вредоносным, и средство анализа 113 передает эту информацию интерпретатору 107. Интерпретатор 107 в этом случае прекращает дальнейшее выполнение кода и передает управление антивирусу 101, который оповещает пользователя компьютера о найденной угрозе (вредоносном файле) и выполняет соответствующие шаги по устранению вредоносного содержимого исследуемого кода.
В таблице 1 приведен пример антивирусных записей, которые совпадают в журнале интерпретатора 114 и в базе антивирусных записей 112. Обычно антивирусные записи называют сингнатурами. Первая запись таблицы содержит запись open, означающую, что сформирован запрос на получение файла, расположенного по адресу URL: "http://*****************exe***.jpg" («*» означает любые символы). Вторая запись означает, что сформированный запрос был отправлен по адресу URL. Третья запись означает сохранение данных в файл "c:\\temp\\*********.exe". И четвертая запись означает запуск на исполнение сохраненного файла. Очевидно, что последовательное выполнение указанных четырех действий обычно свойственно для вредоносного файла. Поэтому антивирусное правило в этом примере будет следующим: если в журнале интерпретатора 114 последовательно содержатся записи 1-4 таблицы 1, то исследуемому коду выносится вердикт "HEUR:Trojan-Downloader.Script.Generic:" (см. таблицу 2). Указанный вердикт означает, что исследуемый код и соответственно исходный код 102 являются вредоносным файлом - трояном-загрузчиком.
На Фиг. 2 представлена подробная схема настоящего изобретения.
Интерпретатор 107 служит для последовательного выполнения каждой инструкции исследуемого кода (промежуточного кода) 201. Когда интерпретатор 107 переходит к выполнению инструкции исследуемого кода 201, содержащей объект, для которого у интерпретатора отсутствует правило интерпретации (т.е. неизвестный объект), дальнейшее выполнение исследуемого кода 201 приостанавливается. Правило интерпретации - это программный код, результат выполнения которого соответствует результату выполнения соответствующей инструкции. Далее интерпретатор 107 получает вспомогательный код, результат выполнения которого соответствует результату выполнения неизвестного объекта, при этом вспомогательный код содержит те объекты (т.е. известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации. Затем интерпретатор последовательно выполняет каждую инструкцию вспомогательного кода, и после завершения выполнения вспомогательного кода интерпретатор 107 возобновляет выполнение исследуемого кода 201 со следующей инструкции исследуемого кода 201, пока не будет выполнена последняя инструкция исследуемого кода 201.
В частном варианте реализации объект является одним из: процедурой, экземпляром класса, методом или переменной экземпляра класса, сценарием, файлом.
На Фиг. 3 представлен способ осуществления настоящего изобретения.
Исследуемый код 201 поступает на вход интерпретатора 107 и, на шаге 301, интерпретатор 107 последовательно выполняет каждую инструкцию исследуемого кода 201 на этапе 202. Когда интерпретатор 107 переходит к выполнению инструкции исследуемого кода 201, содержащей объект (неизвестный объект), для которого у интерпретатора 107 отсутствует правило интерпретации (проверка на шаге 303), приостанавливают дальнейшее выполнение исследуемого кода на шаге 304, и на шаге 305 интерпретатор получает вспомогательный код 306, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код 306 содержит только те объекты (известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации. Далее вспомогательный код 306 передается на выполнение интерпретатору 107 на шаг 301, где последовательно выполняют каждую инструкцию вспомогательного кода 306, и после завершения выполнения вспомогательного кода 306, возобновляют выполнение исследуемого кода 201 на шаге 301 со следующей инструкции исследуемого кода 201. Проверка завершения выполнения вспомогательного кода 306 происходит на шаге 302 и 307. Работа способа изобретения происходит до момента, пока не будет выполнена последняя инструкция исследуемого кода 201. Указанное условие проверяется на шаге 302 и 307. После выполнения последней инструкции исследуемого кода 201 завершается работа интерпретатора 107 на шаге 308.
В частном варианте реализации на шаге 301 интерпретатор 107 инициализирует среду выполнения 110 интерпретатора 107 (этап 203). В еще одном частном случае вспомогательный код 306 содержится в среде выполнения 110 интерпретатора 107 и на шаге 305 вспомогательный код 306 получают из среды выполнения 110.
В частном варианте реализации вспомогательный код 306 получают из локальной базы 111. В этом случае может быть инициализирована среда выполнения (этап 203) для вспомогательного кода 306, т.к. среда выполнения 110 для интерпретатора 107 при своей инициализации не содержит объекты и переменные, используемые вспомогательным кодом 306.
В частном варианте реализации вспомогательный код 306 получают из удаленной базы (не отображена), когда указанный вспомогательный код 306 отсутствует в локальной базе 111.
В частном варианте реализации с помощью средства журналирования 115 производят запись в журнал интерпретатора 114 при выполнении каждой или части инструкций кода (на шаге 301). Список инструкций, для которых необходимо производить запись в журнал интерпретатора 114, может содержаться в эмуляторе 200. С помощью средства анализа 113 проверяют совпадение записей журнала интерпретатора 107 в базе антивирусных записей 112 согласно антивирусным правилам при произведении упомянутых записей. В случае совпадения указанных записей исследуемый код 102 определяют вредоносным.
В частном варианте реализации выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ с использованием лексическим анализатора 103, синтаксический анализ с использованием синтаксического анализатора 104, семантический анализ с использованием семантического анализатора 105, создание промежуточного кода генератором промежуточного кода 106 и интерпретацию промежуточного кода согласно правилам интерпретации с помощью интерпретатора 107.
Стоит отметить, что вспомогательный код 306 может быть написан как на языке исходного кода 102, так и на языке преобразованного исследуемого кода 201, т.е. в преобразованном виде. Например, если исходный язык JavaScript, то преобразованный язык - байт-код виртуальной машины Java. В одном случае реализации, когда вспомогательный код 306 написан на языке исходного кода 102, вспомогательный код 306 будет вначале передан лексическому анализатору 103, затем синтаксическому анализатору 104 и семантическому анализатору 105 и, в итоге, генератор промежуточного кода 106 составит из вспомогательного кода 306 вспомогательный код в преобразованном виде, который уже будет выполняться интерпретатором 107. В частном варианте реализации, после преобразования вспомогательного кода 306, он может быть сохранен в преобразованном виде вместе с непреобразованным вспомогательным кодом 306 или в отдельном хранилище/кэше. При следующем запросе интерпретатором 107 этого вспомогательного кода интерпретатору 107 будет возвращен уже вспомогательный код в преобразованном виде.
В другом случае реализации, когда вспомогательный код 306 изначально представлен в преобразованном виде, вспомогательный код 306 будет отправлен сразу на исполнение интерпретатору 107.
Ниже в таблице 3 приведен пример части исходного кода 107, являющегося вредоносным. Для наглядного понимания приведен именно исходный код 102, а непреобразованный исследуемый код 201. Строка 4 содержит обращение к объекту «Scripting.Dictionary», для которого изначально отсутствовало правило интерпретации. В этом примере объект «Scripting.Dictionary» является неизвестным объектом. Поэтому на шаге 4 будет приостановлено исполнение исследуемого кода на интерпретаторе 107, и интерпретатору 107 будет передан вспомогательный код 306 из таблицы 4, результат выполнения которого соответствует результату выполнения при обращении к объекту «Scripting.Dictionary» в строке 4 таблицы 3. После исполнения вспомогательного кода 306 исполнение исследуемого кода будет возобновлено со строки 5 таблицы 3. Вспомогательный код 306 из таблицы 4 содержит только те объекты (известные объекты), для которых в интерпретаторе 107 присутствует правило интерпретации.
Стоит отметить, что обращение к редким объектам, например функциям, обычно свойственно вредоносным файлам - таким образом вредоносный файл проверяет, что он выполняется в эмуляторе, а не на реальном компьютере.
В еще одном частном варианте реализации вспомогательный код 306 может дополнительно содержать другие неизвестные объекты, для которых может быть получен соответствующих другой вспомогательный код, результат выполнения которого соответствует результату выполнения другого неизвестного объекта.
В таблице 5 приведен пример известных объектов. В таблице 6 приведен пример того, как вспомогательный код для неизвестных объектов содержит известные и неизвестные объекты.
Например, вспомогательный код для неизвестного объекта G содержит только известные объекты А, В, С. В то же время, вспомогательный код для неизвестного объекта Н содержит как известные объекты А, В, так и неизвестный другой объект G. Но для неизвестного другого объекта G также присутствует другой вспомогательный код, который зависит в свою очередь от известных объектов А, В, С.
Таким образом, в данном примере, когда в исследуемом коде 201 будет выполняться инструкция на шаге 202, содержащая неизвестный объект Н, выполнение исследуемого кода будет приостановлено на шаге 304. Далее будет получен вспомогательный код 306 для объекта Н на шаге 305, выполнение которого продолжится на шаге 202. Когда при выполнении вспомогательного кода для объекта Н, будет выполняться инструкция, содержащая другой неизвестный объект G, на шаге 305 будет получен уже другой вспомогательный код для другого неизвестного объекта G, выполнение которого продолжится на шаге 202. После завершения выполнения другого вспомогательного кода для объекта G продолжится выполнение вспомогательного кода 306 для объекта Н, а затем, после завершения выполнения вспомогательного кода 306 для объекта Н, будет продолжено выполнение исследуемого кода 201. При этом, очевидно, исследуемый код 201 может содержать другие неизвестные объекты, для которых снова потребуется получение вспомогательного кода. Кроме этого, «вложенность» зависимости неизвестных объектов от известных объектов может быть сколь угодно большой.
Первый технический результат, заключающийся в улучшении качества выполнения интерпретатором исследуемого программного кода, достигается путем интерпретации вспомогательного программного кода. Улучшение качества выполнения интерпретатором исследуемого программного кода заключается в том, что интерпретатор продолжает выполнение исследуемого программного кода даже тогда, когда исследуемый программный код содержит объекты, для которых у интерпретатора отсутствует правило интерпретации. Известные из уровня техники интерпретаторы и эмуляторы при выполнении инструкций, содержащих неизвестные функции, завершают свое выполнение ошибкой.
Второй технический результат, заключающийся в обеспечении выполнения интерпретатором инструкций исследуемого программного кода, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого интерпретатора, достигается путем интерпретации вспомогательного программного кода. Данный технический результат достигается, т.к. за счет выполнения вспомогательного кода интерпретатором выполнение исследуемого кода не будет остановлено из-за отсутствия какого-либо правила интерпретации для инструкций, для которых у интерпретатора отсутствует правило интерпретации.
Описанное изобретение решает техническую проблему, заключающуюся в необходимости интерпретации инструкций исследуемого программного кода, содержащих объекты, для которых у интерпретатора отсутствует правило интерпретации, без изменения самого программного кода интерпретатора, т.к. в этом случае интерпретатор будет выполнять (интерпретировать) инструкции вспомогательного программного кода.
Фиг. 4 представляет пример компьютерной системы общего назначения, персональный компьютер или сервер 20, содержащий центральный процессор 21, системную память 22 и системную шину 23, которая содержит разные системные компоненты, в том числе память, связанную с центральным процессором 21. Системная шина 23 реализована как любая известная из уровня техники шинная структура, содержащая в свою очередь память шины или контроллер памяти шины, периферийную шину и локальную шину, которая способна взаимодействовать с любой другой шинной архитектурой. Системная память содержит постоянное запоминающее устройство (ПЗУ) 24, память с произвольным доступом (ОЗУ) 25. Основная система ввода/вывода (BIOS) 26, содержит основные процедуры, которые обеспечивают передачу информации между элементами персонального компьютера 20, например, в момент загрузки операционной системы с использованием ПЗУ 24.
Персональный компьютер 20 в свою очередь содержит жесткий диск 27 для чтения и записи данных, привод магнитных дисков 28 для чтения и записи на сменные магнитные диски 29 и оптический привод 30 для чтения и записи на сменные оптические диски 31, такие как CD-ROM, DVD-ROM и иные оптические носители информации. Жесткий диск 27, привод магнитных дисков 28, оптический привод 30 соединены с системной шиной 23 через интерфейс жесткого диска 32, интерфейс магнитных дисков 33 и интерфейс оптического привода 34 соответственно. Приводы и соответствующие компьютерные носители информации представляют собой энергонезависимые средства хранения компьютерных инструкций, структур данных, программных модулей и прочих данных персонального компьютера 20.
Настоящее описание раскрывает реализацию системы, которая использует жесткий диск 27, сменный магнитный диск 29 и сменный оптический диск 31, но следует понимать, что возможно применение иных типов компьютерных носителей информации 56, которые способны хранить данные в доступной для чтения компьютером форме (твердотельные накопители, флеш карты памяти, цифровые диски, память с произвольным доступом (ОЗУ) и т.п.), которые подключены к системной шине 23 через контроллер 55.
Компьютер 20 имеет файловую систему 36, где хранится записанная операционная система 35, а также дополнительные программные приложения 37, другие программные модули 38 и данные программ 39. Пользователь имеет возможность вводить команды и информацию в персональный компьютер 20 посредством устройств ввода (клавиатуры 40, манипулятора «мышь» 42). Могут использоваться другие устройства ввода (не отображены): микрофон, джойстик, игровая консоль, сканер и т.п. Подобные устройства ввода по своему обычаю подключают к компьютерной системе 20 через последовательный порт 46, который в свою очередь подсоединен к системной шине, но могут быть подключены иным способом, например, при помощи параллельного порта, игрового порта или универсальной последовательной шины (USB). Монитор 47 или иной тип устройства отображения также подсоединен к системной шине 23 через интерфейс, такой как видеоадаптер 48. В дополнение к монитору 47 персональный компьютер может быть оснащен другими периферийными устройствами вывода (не отображены), например колонками, принтером и т.п.
Персональный компьютер 20 способен работать в сетевом окружении, при этом используется сетевое соединение с другим или несколькими удаленными компьютерами 49. Удаленный компьютер (или компьютеры) 49 являются такими же персональными компьютерами или серверами, которые имеют большинство или все упомянутые элементы, отмеченные ранее при описании существа персонального компьютера 20, представленного на Фиг. 4. В вычислительной сети могут присутствовать также и другие устройства, например маршрутизаторы, сетевые станции, пиринговые устройства или иные сетевые узлы.
Сетевые соединения могут образовывать локальную вычислительную сеть (LAN) 50 и глобальную вычислительную сеть (WAN). Такие сети применяются в корпоративных компьютерных сетях, внутренних сетях компаний и, как правило, имеют доступ к сети Интернет. В LAN- или WAN-сетях персональный компьютер 20 подключен к локальной сети 50 через сетевой адаптер или сетевой интерфейс 51. При использовании сетей персональный компьютер 20 может использовать модем 54 или иные средства обеспечения связи с глобальной вычислительной сетью, такой как Интернет. Модем 54, который является внутренним или внешним устройством, подключен к системной шине 23 посредством последовательного порта 46. Следует уточнить, что сетевые соединения являются лишь примерными и не обязаны отображать точную конфигурацию сети, т.е. в действительности существуют иные способы установления соединения техническими средствами связи одного компьютера с другим.
В соответствии с описанием компоненты, этапы исполнения, структура данных, описанные выше, могут быть выполнены, используя различные типы операционных систем, компьютерных платформ, программ.
В заключение следует отметить, что приведенные в описании сведения являются примерами, которые не ограничивают объем настоящего изобретения, определенного формулой.
1. Реализуемый компьютером способ выполнения программного кода интерпретатором, в котором:
а) последовательно выполняют каждую инструкцию исследуемого кода;
б) когда интерпретатор переходит к выполнению инструкции исследуемого кода, содержащей неизвестный объект, для которого у интерпретатора отсутствует правило интерпретации, приостанавливают дальнейшее выполнение исследуемого кода, при этом объект является одним из: процедурой; экземпляром класса; методом или переменной экземпляра класса; сценарием; файлом;
в) получают вспомогательный код, результат выполнения которого соответствует результату выполнения упомянутого неизвестного объекта, при этом вспомогательный код содержит известные объекты, для которых в интерпретаторе присутствует правило интерпретации;
г) последовательно выполняют каждую инструкцию вспомогательного кода; и
д) после завершения выполнения вспомогательного кода возобновляют выполнение исследуемого кода на шаге б) со следующей инструкции исследуемого кода, пока не будет выполнена последняя инструкция исследуемого кода.
2. Способ по п. 1, в котором на шаге а) инициализируют среду выполнения интерпретатора.
3. Способ по п. 2, в котором вспомогательный код содержится в среде выполнения интерпретатора и на шаге в) вспомогательный код получают из среды выполнения интерпретатора.
4. Способ по п. 1, в котором на шаге в) вспомогательный код получают из локальной базы.
5. Способ по п. 4, в котором инициализируют среду выполнения интерпретатора для вспомогательного кода.
6. Способ по п. 4, в котором на шаге в) получают упомянутый вспомогательный код из удаленной базы, когда упомянутый вспомогательный код отсутствует в локальной базе.
7. Способ по п. 1, в котором выполнение кода и выполнение вспомогательного кода включает следующие этапы: лексический анализ, синтаксический анализ, создание промежуточного кода и интерпретацию промежуточного кода согласно правилам интерпретации.
8. Способ по п. 1, в котором вспомогательный код дополнительно содержит по меньшей мере один другой неизвестный объект, для которого получают другой вспомогательный код, результат выполнения упомянутого другого вспомогательного кода соответствует результату выполнения другого неизвестного объекта.