Программно проверять файлы .class - PullRequest
12 голосов
/ 03 октября 2008

Я работаю над проектом, в котором мы выполняем много удаленной передачи объектов между службой Java и клиентами, написанными на других языках. Учитывая наши текущие ограничения, я решил посмотреть, что потребуется для генерации кода на основе существующего класса Java. По сути, мне нужно взять файл .class (или их совокупность), проанализировать байт-код, чтобы определить все члены данных и, возможно, получатели / установщики, а затем написать что-то, что может выводить код на другом языке, чтобы создать класс с та же структура.

Я не ищу стандартные декомпиляторы, такие как JAD. Мне нужно иметь возможность взять файл .class и создать объектную модель из его элементов данных и методов. Возможно ли это вообще?

Ответы [ 6 ]

12 голосов
/ 03 октября 2008

Я использовал BCEL и считаю его довольно неловким. ASM намного лучше. Он очень широко использует посетителей (что может немного смущать) и не создает объектную модель. Не создание объектной модели оказывается бонусом, поскольку любая модель, которую вы хотите создать, вряд ли будет выглядеть буквально как интерпретация всех данных.

1 голос
/ 03 октября 2008

Я в шоке, что никто еще не упомянул ASM . Это лучшая библиотека байт-кодов, которую можно купить за ваши деньги. Ну, хорошо, это бесплатно.

1 голос
/ 03 октября 2008

JAD - это декомпилятор Java, который не разрешает программный доступ. Он больше недоступен и, вероятно, не будет работать для новых проектов с байт-кодами Java7.

1 голос
/ 03 октября 2008

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

Я бы перешел на BCEL, только если вы пытаетесь перевести инструкции метода. (И если это то, что вы пытаетесь автоматизировать, удачи!)

1 голос
/ 03 октября 2008

Я использовал BCEL в прошлом, и его было довольно легко использовать. Это было несколько лет назад, поэтому сейчас может быть что-то лучше.

Apache Jakarta BCEL

0 голосов
/ 03 октября 2008

Я думаю, вам тоже может помочь javassist.

http://www.jboss.org/javassist/

У меня никогда не было необходимости его использовать, но если вы попробуете, дайте нам знать ваши комментарии об этом?

Хотя я думаю, что это больше для манипулирования байт-кодом, чем для проверки .class.

...