2017-01-31 8 views
2

Я пытаюсь использовать библиотеку Java ASM, и после довольно много исследований я не нашел решений проблемы, с которой я сталкиваюсь. Я пытаюсь сделать приложение, которое выполняет следующее:Способы удаления с помощью Java ASM

  • Читает классы из внешнего файла Jar
  • полностью удалить некоторые методы из указанных классов
  • Печати на консоль или сохранить измененный класс скомпилированных байт-коду или скомпилированное содержимое класса, как из new String(cw.toByteArray()) квазинепрерывных быть экземпляр ClassWriter (подобно тому, как вы увидите, если вы редактировали файл класса с помощью блокнота)

я смог прочитать байты-код и скомпилированные CLAS s, но не удалять методы. Я не смог найти какой-либо рабочий код, только частичный код с очень небольшим объяснением того, как его реализовать.

+1

'new String (cw.toByteArray())' не имеет никакого смысла. – Holger

+0

Вместо 'new String (cw.toByteArray())' для просмотра содержимого, почему бы не использовать Textifier? Это облегчает чтение класса, поскольку он печатает байт-код данного класса в хорошо отформатированном виде. –

ответ

2

Вы можете реализовать ClassVisitor, который переопределяет метод visitMethod и вернуть null из этого метода, не прибегая к super.visitMethod, когда вы обнаружите определенную модель.

Таким образом, данный метод пропускается и не добавляется в созданный файл класса.

+0

Извините, мне потребовалось столько времени, чтобы ответить, но как я могу использовать такой класс и сохранить из него одни и те же данные класса? После того, как я прочитал «байт-код» класса, он читает то же самое. – RubbaBoy

+0

Вам нужно будет записать его на диск. –

+0

Как мне это сделать? (извините, я немного noob в ASM) и есть ли хорошие учебники по тому, что я пытаюсь выполнить? – RubbaBoy