Что такое ILLegal Byte code?

Читая Java Security, я наткнулся на следующие предложения, но не смог найти удовлетворительного объяснения в Интернете. Может кто-нибудь, пожалуйста, объясните

  • Предотвращает загрузку классов с помощью байт-кода
  • Предотвращает загрузку в нелегальные пакеты

3 ответа

Решение

Однако мы не можем быть уверены, что сам класс безопасен. В SecurityManager все еще есть защитная сеть, которая предотвращает доступ класса к защищенным ресурсам, таким как сеть и локальный жесткий диск, но этого недостаточно. Класс может содержать недопустимый байт-код, подделывать указатели на защищенную память, переполнять или переполнять программный стек или каким-либо другим образом нарушать целостность JVM. Проверьте тему Проверка файла класса в [1]: http://medialab.di.unipi.it/doc/JNetSec/jns_ch5.htm

Верификатор байт-кода выполняет следующие проверки:

  • Ветви должны находиться в пределах массива кода для метода.
  • Цели всех команд потока управления являются началом команды. В случае широкой инструкции, широкий код операции считается началом команды, а код операции, дающий операцию, измененную этой широкой командой, не считается началом команды. Ветви в середине инструкции запрещены.
  • Никакая инструкция не может получить доступ или изменить локальную переменную с индексом, большим или равным количеству локальных переменных, которые ее метод указывает, что она выделяет.
  • Все ссылки на пул констант должны быть на запись соответствующего типа. Например: инструкция ldc может использоваться только для данных типа int или float или для экземпляров класса String; инструкция getfield должна ссылаться на поле.
  • Код не заканчивается в середине инструкции.
  • Выполнение не может выпасть из конца кода.
  • Для каждого обработчика исключений начальная и конечная точка кода, защищенного обработчиком, должна находиться в начале инструкции или, в случае конечной точки, сразу после конца кода. Начальная точка должна быть перед конечной точкой. - Код обработчика исключений должен начинаться с действительной инструкции и может не начинаться с кода операции, изменяемого широкой инструкцией.

Исходный код компилируется в байт-код, который распространяется среди пользователей. Если байт-код был поврежден или не был создан компилятором Java, то он может быть недопустимым, то есть байты не имеют смысла.

Другие вопросы по тегам