Язык и архитектура Java

       

Процесс проверки байт-кодов


Несмотря на то, что компилятор гарантирует, что коды не нарушают требований безопасности, если они были получены из других точек сети возникает следующая проблема: коды могут быть созданы не компилятором Java, а другими средствами. Или они могут быть намеренно модифицированы после создания. Поэтому run-time система подвергает полученные коды тщательной проверке.

Проверка включает в себя несколько этапов, начиная с контроля целостности формата полученного файла до анализа каждого фрагмента кодов на предмет выполнения следующих правил:

  • нет незаконных манипуляций с указателями
  • нет попыток нарушения прав доступа
  • объекты используются в строгом соответствии с их типами, например, объекты класса InputStream используются только как InputStream и никак иначе.
  • Верификатор байт-кодов

    Верификатор байт-кодов (bytecode verifier) сканирует байт-коды, извлекает информацию о типах объектов в каждой точке выполнения фрагмента кода.

    На приведенном рисунке изображен путь от исходных текстов на языке Java через компилятор Java, верификатор кодов до интерпретатора. Важно отметить, что загрузчик и верификатор байт-кодов не делают никаких предположений относительно происхождения кодов -- получены они с локальной файловой системы или с другого континента. Верификатор гарантирует, что любой код, прошедший проверку, может быть использован интерпретатором без риска повредить его (интерпретатор), а именно:

  • не может произойти переполнение или "исчерпание" стека
  • параметры для инструкций байт-машины имеют нужный тип
  • доступ к полям и методам объектов не нарушает объявленных в классе правил (public, private, protected)


  • Содержание раздела