ASM 바이트 코드 사용 방법 본문에있는 루프 또는 while 루프를 식별 할 수 있습니까?for/while 루프를 식별하는 ASM 바이트 코드
-2
A
답변
2
추출 할 정보에 따라 다릅니다. 원칙적으로 브랜치를 검색하여 루프를 검색 할 수 있습니다.. 루프는 일반적인 코드 구조 없이도 작동 할 수 없으며 루프의 일부가 아닌 뒤로 분기를 찾을 수 없습니다.
그래서 당신은 그들에게, 명시 적으로 ifne
바이트 코드 지침 goto
, goto_w
, if_acmpeq
, if_acmpne
, if_icmpeq
, if_icmpge
, if_icmpgt
, if_icmple
, if_icmplt
, if_icmpne
, ifeq
, ifge
, ifgt
, ifle
, iflt
을 모두 이름을 갖고 싶어 , ifnonnull
, ifnull
은 거꾸로 가리키면 루프를 나타낼 수 있습니다.
하지만 대부분의 경우 어떤 종류의 루프를 가지고 있는지 알 수 없을 것입니다. 컴파일 된 코드에서 for
루프와 while
루프 사이에는 큰 차이가 없습니다. 예를 들어, 다음 코드 조각은 완전히 동일합니다
for(a();b();c()) { d(); }
a(); for(;b();) { d(); c(); }
a(); for(;;) { if(!b()) break; d(); c(); }
a(); while(b()) { d(); c(); }
그것은 더 복잡한 구조, 예를 들어,로 악화도 될 것입니다 동일한 코드 위치를 가리키는 두 개의 뒤로 분기가 본문 내의 조건문 continue
문 또는 두 개의 중첩 루프에 속한 단일 루프에 속하는지 여부를 확인하려는 경우 그것은 불가능한 것으로 판명 될 수 있습니다.
태그가 맞지 않습니다. –
그래서 "byte xyz가 있다면 while 루프입니까?" – deviantfan
안녕하세요 deviantfan, 당신 말이 맞아요. –