2017-04-04 1 views
0

런타임시 Java 메서드 본문을 분석해야합니다. javassist는 이것을 도와주는 많은 메소드를 제공합니다. 하지만 이제는 주어진 메소드에 if 문이나 루프가 있는지 알아야합니다. 나는 어떻게 이것을 얻을 수 있습니까?javassist를 사용하여 java 메서드에서 if 문을 찾는 방법

대부분의 질문은

method.instrument(new ExprEditor() { 
    @Override 
    public void edit(MethodCall m) { 
     // do some checks 
    } 
}); 

를 사용하여 대답하지만, 지점 또는 루프에 대한 편집-방법이 없다 할 수있다. 지금까지 시도하는 것 :

for (CodeIterator ci = method.getMethodInfo().getCodeAttribute().iterator(); ci.hasNext();) { 
    int op = ci.next(); 
    System.out.println(Mnemonic.OPCODE[op]); 
} 

if_* 또는 goto 일부를 찾을 희망. 그러나 이와 같은 것을 찾지 못했습니다.

답변

1

그래서,와 Javassist에 방법의 미세 입자 분석을 가지고 자신을 시도하고 그게 정말 정말 열심히하지 않을 경우 불가능 입니다 발견했다.

어쨌든 내 시간에 나는 this이라는 잘 구조화 된 Javassist analyzer가있는 Java 프로젝트를 발견했습니다. github의 흥미있는 패키지에 대한 링크를 따라 간다면. 클래스 ControlFlow.java을 먼저 살펴본 다음 'Analyzer.java'를 자세히 살펴보십시오. Javassist로 멋진 일을 할 수 있습니다.

나는 자신의 입장에 있었지만 문제를 해결하기 위해 열심히 노력했지만 Javassist는 바이트 코드의 초 미세 입자 분석을 위해 빌드하지 않았으므로 몇 가지를 더 파헤 쳤다. 이 작업에 더 적합한 라이브러리 : ASM. 그것의 website에 관심이 있다면 그것에 대한 튜토리얼을 찾을 수 있습니다.

NB :이 도구를 사용하면 분기 기준으로 클래스 분기를 실제로 분석하거나 행 단위로 분석 할 수 있습니다.

+0

if 문에서 if 문을 찾는 방법을 설명 할 수 있습니까? – Qoros

+0

이 링크를 체크 아웃하십시오. https://stackoverflow.com/questions/37066812/selecting-and-modifying-if-statement-with-asm – rakwaht

관련 문제