Opal은 Java Bytecode 분석 및 엔지니어링을위한 확장 가능한 라이브러리입니다. Opal은 Scala로 완전히 작성되었으며 Scala의 고급 언어 기능을 활용하여 이전에 보이지 않는 유연성과 사용 편의성을 제공합니다. Opal은 접지에서 확장 성 , 적응성 및 확장 성 (메모리 및 성능 면적)을 염두에두고 설계되었습니다. OPAL의 많은 부분은 이미 병렬화되고 동시 분석을 구현하는 데 필요한 인프라를 제공하거나 적어도 스레드 안전입니다.
Opal은 여러 프로젝트로 구성됩니다.
공통 (Opal/Common) : 일반적인 유용한 기능, 데이터 구조 (예 : Triemaps) 및 그래프 알고리즘 (예 : BYTE) 코드를 분석 할 때 유용한 그래프 알고리즘 (예 : 강력하게 연결된 구성 요소 컴퓨팅)을 포함합니다.
정적 분석 인프라 (OPAL/SI) : 모듈화 된 정적 분석의 구현을위한 일반적인 격자 기반 프레임 워크가 포함되어 있습니다.
바이트 코드 인프라 (OPAL/BI) : Java 1.0 -Java 16 바이트 코드를 구문 분석하는 데 필요한 인프라.
Bytecode disassembler (opal/da) : 클래스 파일의 일대일 표현을 제공하고 Java 클래스 파일의 읽기 쉬운 HTML 표현을 생성하는 데 사용할 수있는 Java Bytecode disassembler.
바이트 코드 제작자 (OPAL/BC) : Java Bytecode 엔지니어를위한 대부분의 기본 인프라.
바이트 코드 표현 (Opal/Br) : Opal의 Java Bytecode의 기본 표현. Java 클래스 파일의 기본 분석을 수행하기 위해 모든 기능을 구현합니다.
초록 해석 프레임 워크 (OPAL/AI) : 다양한 수준의 정밀도에서 쉽게 분석을 구현하는 데 사용할 수있는 추상 해석 기반 프레임 워크 구현.
3 개의 주소 코드 (OPAL/TAC) : 2 개의 3 주식 코드 기반 중간 표현을 제공합니다. 바이트 코드를 기반으로 직접 생성되는 순진한 것과 기본적인 추상 해석 결과를 사용하여 CFG 및 DEF- 사용 정보를 직접 제공하는 상위 수준의 SSA와 같은 표현.
종속성 추출 (OPAL/DE) : 프로젝트의 소스 코드 종속성 추출 및 분석을 지원합니다. 이 프로젝트는 예를 들어 점검 아키텍처를위한 프로젝트의 토대입니다.
아키텍처 검증 (OPAL/AV) : 지정된 프로젝트에 대해 프로젝트 구현 된 아키텍처를 확인하는 작은 프레임 워크.
프레임 워크 (Opal/Framework) : 기본적으로 모든 하위 프로젝트를 집계하여 모든 하위 프로젝트의 일관된 스냅 샷을 쉽게 얻을 수 있도록합니다. 일반적으로 Opal을 사용하려면이 프로젝트에 대한 의존성을 선언하는 것이 좋습니다.
데모 (Opal/Demos) : Opal 사용 방법을 보여주는 작업 코드 샘플이 포함되어 있습니다. 데모 프로젝트의 코드는 주로 교육 자원으로 의미합니다. 예제를 시작하려면 sbt 콘솔 (Scala Build Tools)을 시작하고 현재 프로젝트를 "데모"( project Demos )로 변경하십시오. 그 후 몇 가지 작은 데모 분석을 run 수 있습니다.
Hermes (Opal/Tools/Hermes) : 프로젝트 세트에 대해 다양한 코드 쿼리를 실행하는 프레임 워크.
BugPicker (Opal/Tools/BP) : 소스 코드에서 제어/데이터 흐름 종속 문제를 찾는 도구. 식별되는 종류의 문제는 쓸모없는 방어 검사에서부터 런타임 예외로 이어지는 버그에 이르기까지 다양합니다.
Opal은 또한 개발자가 Java Bytecode 및/또는 Opal에 익숙해 지도록 돕기 위해 점점 더 많은 도구를 제공합니다. 이 프로젝트는 DEVELOPING_OPAL/tools 폴더에서 발견되며 SBT 콘솔을 사용하여 실행할 수 있습니다.
다음은 "마스터/개발"지점에 적용됩니다.
Opal은 SBT를 빌드 도구로 사용하고 SBT 콘솔을 사용하는 데 특히 쉽습니다. Java 8 이상 업데이트 171, Scala 2.12.13 및 SBT 1.4.6이 설치되고 실행되고 SBT가 4GB 이상의 RAM (-xmx4g)을 사용할 수 있는지 확인하십시오. 최근 오팔 스냅 샷을 다운로드하거나 저장소를 복제하십시오. Opal의 루트 폴더로 이동하십시오.
sbt cleanBuild 에 전화하십시오. 이는 모든 핵심 프로젝트 (테스트 포함)를 컴파일하고 프로젝트 전체 ScalADOC 문서를 생성하며 프로젝트를 로컬 아이비 디렉토리에 게시합니다.local.sbt 파일을 편집하고 두 시스템 속성 ( JAVA_OPTS CPUBoundTasks === "Number of real CPUs (Cores)" : -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24 값을 컴퓨터에 적합한 값으로 설정 IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" ). 다음을 입력하여 SBT를 사용할 때 이러한 속성을 설정할 수도 있습니다.eval sys.props("org.opalj.threads.CPUBoundTasks") = "1" .sbt test 전화하여 단위 테스트를 실행하고 모든 것이 예상대로 작동하는지 테스트하십시오. 일부 테스트는 일부 추가 (색상) 출력을 생성합니다. 그러나 모든 테스트가 오류없이 성공하는 한 모든 것이 정상입니다. sbt test 실패하면 메모리가 부족하기 때문일 수 있습니다. 이 경우 더 많은 메모리로 SBT 자체를 시작해야합니다.sbt it:test 통해 통합 테스트 스위트를 실행하십시오. 이 테스트 스위트를 실행하는 데는 매우 오래 걸릴 수 있습니다 (32GB와 8 코어가있는 빠른 데스크탑에서 ~ 2h가 걸립니다).당신은 갈 준비가되었습니다.
문제 해결
Opal 구축에 문제가 발생하면 다음 옵션을 고려하십시오.
시작하려면 프로젝트 웹 페이지로 이동하십시오. 또한 Demos 프로젝트의 코드에는 일반적으로 반복되는 작업을 해결하는 방법을 보여주는 많은 짧은 (ER) 예제가 포함되어 있습니다. 대부분의 예는 직접 실행할 수 있습니다.
SBT 콘솔을 시작하십시오. (Opal의 루트 폴더에서 명령 줄에서 sbt 호출합니다.) 명령 project Demos 데모를 사용하여 프로젝트를 데모로 변경하고 유형 run 사용하여 데모 중 하나를 실행하십시오.