나는 byte[]
배열을 가지고 있는데, 이는 클래스 파일 내부의 메소드에 대한 바이트 코드 시퀀스라는 것을 알고있다. 이 byte[]
배열을 선택적으로 디 컴파일하는 몇 가지 방법이 있습니까? 실제 .class
파일에 액세스 할 수 없습니다. 많은 메소드 (javassist.bytecode.CodeAttribute
클래스)가있는 Javassist 라이브러리를 살펴 보았지만 그러한 특정 메소드를 찾을 수 없었습니다.
누구나 단서가 있습니까?바이트 코드 시퀀스 디 컴파일
이 byte[]
배열을 가져올 수 있으며 JVM 참조 설명서를 사용하여 실제 바이트 코드를 JavaByte 코드 니모닉으로 생성 할 수 있지만 디 컴파일 된 Java 소스 코드를 생성해야합니다. 감사합니다.
JPDA 메소드'com.sun.jdi.Method.bytecodes()'함수 호출에서 바이트 코드를 받았습니다. 나는 그 기능의 디 컴파일 된 버전을 표시 할 수 있도록 디 컴파일하려고합니다. 문제 (예 : 보호, 비공개, 정적 변수 등의 외부 참조)가있을 수 있음을 확인했습니다. 그러나 나는 그것을 디 컴파일하는 방법이 있기를 희망했다. 나는 바이트 코드로부터 디코딩 된 니모닉을 생성하는 자체 바이트 코드 디 컴파일 방법을 썼기 때문에 (필자는'javap'의 결과와 함께 그것을 검증했습니다) 유효한'바이트 []'배열에서 유효한 바이트 코드를 가지고 있습니다. – tr4nc3
흥미 롭습니다. 음, 디 컴파일러가 밖에 있습니다. 프로그래밍 API를 제공하는 유일한 API는 [Java Decompiler] (http://java.decompiler.free.fr/)입니다. 나는 그것이 디 컴파일러가 입력 바이트 코드와 관련하여 얼마나 유연한 지에 달려 있다고 생각한다. JDI는 모르지만'com.sun.jdi.Method'를 사용하면 클래스를 나타내는 무언가를 만들고 더 많은 바이트 코드 정보를 얻을 수 있습니다. 아마도'method.declaringType()'과 같은 것이 될 것입니다.이 클래스는 [ClassType]을 제공합니다 (http://docs.oracle.com/javase/6/docs/jdk/api/jpda/jdi/com/sun/jdi/ ClassType.html)? –
맞아요.'Method.declaringType()'은'ReferenceType' 객체만을 제공합니다. 해당 객체에서 바이트 코드를 가져올 메소드가 없습니다. 'sourcePath()'와'sourceName()'함수 호출이 있습니다. 소스 파일 이름을 얻을 수는 있지만 (그 소스가 있다고 가정합니다), 대부분의 경우가 아닐 수도 있습니다. 첫 번째 장소에서 디 컴파일러). JD-Eclipse 사용자가 프로그래밍 방식의 API를 제공하는지 확신 할 수 없습니다. 나는 그들이 이클립스를 가지고 있다고 믿는다. 또한 닫힌 소스이기 때문에 라이센스 당 허용되지 않는 릴리스 파일을 뒤집을 수 있습니다. – tr4nc3