2017-01-31 10 views
2

Java ASM 라이브러리를 사용하려고하는데, 많은 연구 끝에 필자가 겪고있는 문제에 대한 해결책을 찾지 못했습니다.Java ASM으로 메소드 제거

  • 는 콘솔 또는 수정 된 클래스의 컴파일 된 바이트 코드를 저장하기 위해 지정된 클래스에서
  • 인쇄를 완전히 특정 방법을 제거 외부 JAR 파일에서 클래스를 읽어 : 나는 다음과 같은 작업을 수행하는 응용 프로그램을 만들려고 해요 또는 new String(cw.toByteArray())에서와 같은 컴파일 된 클래스 내용, CW 인 내가 바이트 코드를 읽을 수 있었다

및 컴파일 된 CLA를 (당신이 메모장 클래스 파일을 편집 할 경우 볼 것이다 방법과 유사) ClassWriter의 인스턴스 메소드를 제거하지는 않습니다. 나는 어떤 실무 코드도 찾지 못했고, 실전 코드를 구현하는 방법에 대한 설명이 거의없는 부분 코드 만 찾을 수 있었다.

+1

'new String (cw.toByteArray())'는 의미가 없습니다. – Holger

+0

내용을 보는''새로운 문자열 (cw.toByteArray())'대신에 왜 Textifier를 사용하지 않겠습니까? 주어진 형식의 바이트 코드를 멋지게 형식화 된 방식으로 인쇄하기 때문에 클래스 읽기가 더 쉬워집니다. –

답변

2

당신은 visitMethod 방법을 재정의하는 ClassVisitor을 구현하고 특정 패턴을 발견 할 때 super.visitMethod를 호출하지 않고이 방법에서 null을 반환 할 수 있습니다.

이렇게하면 해당 메소드가 건너 뛰고 작성된 클래스 파일에 추가되지 않습니다.

+0

죄송합니다. 응답하는 데 너무 오래 걸렸지 만 어떻게 그런 클래스를 사용하고 동일한 클래스 데이터를 유지할 수 있습니까? 클래스의 바이트 코드를 읽은 후에도 동일하게 읽습니다. – RubbaBoy

+0

디스크에 다시 써야합니다. –

+0

어떻게해야할까요? (죄송합니다, ASM의 멍청한 놈입니다.) 그리고 내가 성취하고자하는 것에 대한 좋은 자습서가 있습니까? – RubbaBoy