Java Path Finder для проверки байт-кода в существующем проекте, проверка байт-кода - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь использовать JPF для проверки моего байт-кода, сгенерированного во время выполнения с помощью javassist.

Код, который я пытаюсь проверить, предоставляется пользователем во время работы моей программы.Поскольку я не могу проверить все модели ООП и тому подобное, мне нужен процесс проверки перед запуском его кода.

В данный момент я просто генерирую байт-код с помощью javassist из его классов.

Моя проблема сейчас в том, что иногда я получаю исключения, потому что пользователь сделал некоторые ошибки наследования и все такое, и мое приложение закрывается с исключением, потому что я пытался загрузить и выполнить его классы.

Поэтому яхотел бы проверить этот сгенерированный байт-код во время выполнения, чтобы избежать таких исключений и узнать ранее, являются ли классы, предоставленные пользователем, неисправными (или содержат какие-либо проблемы).

Возможно ли это с JPF во время выполнения?

Есть ли другие решения по этому вопросу?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Поскольку JPF использует BCEL Автономный верификатор байт-кода может быть полезным. Просто программно вызовите класс Verifier или даже погрузитесь в детали этого класса. НТН

1 голос
/ 03 апреля 2012

Есть много точек для проверки:

С моей точки зрения, ClassLoader выполняет все эти шаги, но обычно загружает один класс за раз,и только по требованию.

В вашем контексте я предлагаю вам написать ClassLoader, который загружает последовательно все классы из сгенерированных байт-кодов и сообщает о каждом неудачном имени класса с перехваченными исключениями.ClassLoader создается со ссылкой на соответствующий родительский ClassLoader и отбрасывается после пройденного теста, сгенерированный байт-код затем загружается исходным ClassLoader вашего контекста времени выполнения.

Возможно, эта проверка загрузки класса может быть реализована благодаряOSGi, но это потребует больше усилий, чем автономный ClassLoader.

0 голосов
/ 03 апреля 2012

Если у вас нет абсолютных требований для использования JPF, библиотека ASM включает CheckClassAdapter, который может проверять байт-код.Однако это всего лишь проверка работоспособности - я не верю, что это уловит проблемы с наследованием и т. Д.

...