버전 2403
PhASAR은 주로 Heinz Nixdorf Institute(University of Paderborn) 및 Fraunhofer IEM의 보안 소프트웨어 엔지니어링 그룹에서 개발 및 유지 관리됩니다.
PhASAR의 수석 개발자는 Fabian Schiebel(@fabianbs96)([email protected]), Martin Mory(@MMory)([email protected]), Philipp Dominik Schubert(@pdschubert)(philipp. [email protected]) 및 기타.
PhASAR에는 C++-17이 필요합니다.
그러나 C++20 모드에서의 빌드는 실험적 기능으로 지원됩니다. cmake 변수 CMAKE_CXX_STANDARD
20
으로 설정하여 이 설정을 활성화할 수 있습니다. phasar는 현재 C++-20 기능을 사용하지 않지만(#ifdef 테두리 뒤의 일부 concept
제외) phasar를 라이브러리로 사용하는 클라이언트 애플리케이션은 C++20 이전 기능을 사용하는 것이 좋습니다.
PhASAR은 현재 LLVM-14.0을 지원하도록 설정되어 있습니다.*
PhASAR은 C++로 작성된 LLVM 기반 정적 분석 프레임워크입니다. 이를 통해 사용자는 임의의 데이터 흐름 문제를 지정한 다음 지정된 LLVM IR 대상 코드에서 완전 자동화된 방식으로 해결될 수 있습니다. 포인트-정보, 호출 그래프 등의 계산은 프레임워크에 의해 수행되므로 중요한 사항에 집중할 수 있습니다.
PhASAR를 정적 분석 분야의 최첨단 연구와 생산적인 사용에 적합한 상태로 유지하려면 획기적인 변화가 필요합니다. 최근에 손상된 내용과 마이그레이션 방법에 대한 자세한 내용은 주요 변경 사항을 참조하세요.
Wiki 에는 PhASAR에 대한 일부 문서가 있습니다. 아마도 이 README를 먼저 읽어보고 싶을 것입니다.
또한 PhASAR의 프로젝트 디렉토리를 살펴보고 프로젝트 디렉토리 examples/
와 사용자 정의 도구 tools/example-tool/myphasartool.cpp
확인하세요.
전체 C++ 경험을 얻고 빌드 모드를 완전히 제어하려면 PhASAR을 직접 컴파일하는 것이 좋습니다. 그러나 PhASAR 또는 Docker 컨테이너의 사전 구축된 버전 중 하나를 시험해 볼 수도 있습니다.
시스템의 첫 번째 PhASAR 빌드에 대한 지름길로 부트스트랩 스크립트를 사용할 수 있습니다. 스크립트가 제대로 작동하려면 Python이 설치되어 있어야 합니다.
./bootstrap.sh
참고: PhASAR 내에서 변경을 수행하려면 디버그 모드에서 빌드하는 것이 좋습니다.
./bootstrap.sh -DCMAKE_BUILD_TYPE=Debug
부트스트랩 스크립트는 (종속성을 설치하기 위해) 수퍼유저 권한을 요청할 수 있습니다. 그러나 전체 스크립트를 sudo
로 시작하는 것은 권장되지 않습니다.
후속 빌드에 대해서는 PhASAR 컴파일을 참조하세요.
C 및 C++ 컴파일러에 대한 시스템 변수를 clang으로 설정합니다.
export CC=/usr/local/bin/clang
export CXX=/usr/local/bin/clang++
시스템에 따라 경로를 조정해야 할 수도 있습니다. Github에서 PhASAR를 복제한 경우 PhASAR을 빌드하기 전에 PhASAR의 하위 모듈을 초기화해야 합니다.
git submodule update --init
PhASAR을 압축 릴리스(예: .zip 또는 .tar.gz)로 다운로드한 경우 필요한 하위 모듈을 수동으로 복제하는 init-submodules-release.sh
스크립트를 사용할 수 있습니다.
utils/init-submodules-release.sh
PhASAR 디렉터리로 이동합니다. 다음 명령은 작업을 수행하고 PhASAR 프레임워크를 컴파일합니다.
mkdir build
cd build/
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja -j $( nproc ) # or use a different number of cores to compile it
sudo ninja install # only if you wish to install PhASAR system wide
bootstrap.sh
스크립트를 사용하여 PhASAR을 설치했다면 위의 단계는 이미 완료되었습니다. PhASAR을 수정하고 다시 컴파일하려는 경우 이를 참조로 사용하십시오.
cmake를 사용하여 컴파일한 후 build/tools 디렉터리에서 다음 두 바이너리를 찾을 수 있습니다.
phasar-cli
- PhASAR 내에 이미 구현된 분석에 대한 액세스를 제공하는 PhASAR 명령줄 도구(이전 phasar-llvm
)입니다. PhASAR 위에 자체 도구를 구축하고 싶지 않다면 이것을 사용하세요.myphasartool
- PhASAR 위에 도구를 구축하는 방법을 보여주는 예제 도구컴파일 시 오류가 발생하는지 주의 깊게 확인하시기 바랍니다.
CMake를 사용하여 PhASAR을 컴파일할 때 다음 선택적 매개변수를 사용할 수 있습니다:
매개변수: 유형 | 효과 |
---|---|
BUILD_SHARED_LIBS : 부울 | 공유 라이브러리 구축 - 더 이상 권장되지 않습니다. 대신 PHASAR_BUILD_DYNLIB를 사용할 수도 있습니다(기본값은 OFF입니다). |
PHASAR_BUILD_DYNLIB : BOOL | 하나의 팻 공유 라이브러리 구축(기본값은 OFF) |
CMAKE_BUILD_TYPE : STRING | 'Debug', 'RelWithDebInfo' 또는 'Release' 모드에서 PhASAR 빌드(기본값은 'Debug') |
CMAKE_INSTALL_PREFIX : 경로 | "ninja install"이 호출되거나 "install" 대상이 빌드된 경우 PhASAR이 설치될 경로(기본값은 /usr/local/phasar) |
PHASAR_CUSTOM_CONFIG_INSTALL_DIR : 경로 | 설정된 경우 PhASAR용 구성 파일이 설치된 디렉터리를 사용자 지정합니다(기본값은 /usr/local/.phasar-config). |
PHASAR_ENABLE_DYNAMIC_LOG : BOOL | 런타임 시 로거를 켜고 끌 수 있도록 합니다(기본값은 ON). |
PHASAR_BUILD_DOC : 부울 | PhASAR 문서 작성(기본값은 OFF) |
PHASAR_BUILD_UNITTESTS : BOOL | PhASAR 단위 테스트 빌드(기본값은 ON) |
PHASAR_BUILD_IR : 부울 | PhASAR IR 구축(단위 테스트 실행에 필요)(기본값은 ON) |
PHASAR_BUILD_OPENSSL_TS_UNITTESTS : BOOL | OpenSSL이 필요한 PhASAR 단위 테스트 빌드(기본값은 OFF) |
PHASAR_ENABLE_PAMM : STRING | 성능 측정 메커니즘 활성화('Off', 'Core' 또는 'Full', 기본값은 Off) |
PHASAR_ENABLE_PIC : 부울 | 위치 독립적 코드 작성(기본값은 ON) |
PHASAR_ENABLE_WARNINGS : BOOL | 컴파일러 경고 활성화(기본값은 ON) |
CMAKE_CXX_STANDARD : 정수 | C++17 또는 C++20 모드에서 phasar 빌드(기본값은 17) |
이러한 매개변수를 직접 사용하거나 설치 프로그램 스크립트 bootstrap.sh
수정할 수 있습니다.
C++의 긴 컴파일 시간은 항상 고통스럽습니다. 위에서 볼 수 있듯이 cmake를 사용하면 컴파일을 쉽게 병렬로 실행할 수 있으므로 컴파일 시간이 단축됩니다. 그것을 활용하십시오!
모든 것이 예상대로 작동하는지 테스트하려면 다음 명령을 실행하십시오.
$ phasar-cli -m test/llvm_test_code/basic/module_cpp.ll -D ifds-solvertest
tools/phasar-cli
아래의 빌드 트리에서 phasar-cli
도구를 찾을 수 있습니다.
분할 오류 이외의 출력을 얻거나 프로그램을 비정상적으로 종료하는 예외가 발생하면 모든 것이 예상대로 작동합니다.
불행한 MacOS 업데이트와 C++ 처리, 특히 최신 M1 프로세서로 인해 Mac에서의 기본 개발을 지원할 수 없습니다. 현재 Mac에서 PhASAR을 개발하는 가장 쉬운 솔루션은 Docker 개발 환경을 사용하는 것입니다. 해당 문서에 설명된 대로 이 저장소를 복제하세요. 그런 다음 docker exec -it -u root <container name> /bin/bash
실행하여 이 추가 정보에 설명된 대로 나머지 빌드 프로세스를 완료하여 루트 사용자로 수동으로 한 번 로그인해야 합니다(하위 모듈 설치, 부트스트랩 실행). 쉿, ...). 이제 원격 개발을 지원하는 VS Code 또는 다른 IDE에 Docker 컨테이너를 연결할 수 있습니다.
PhASAR은 다음에 설명된 대로 설치 프로그램 스크립트를 사용하여 설치할 수 있습니다. 그러나 PhASAR을 사용하기 위해 설치할 필요는 없습니다.
다음에서는 Ubuntu 또는 Unix 계열 시스템을 사용하여 PhASAR을 설치하는 방법에 대한 완전한 예를 제공하고자 합니다.
따라서 설치 스크립트를 제공합니다. PhASAR을 설치하려면 PhASAR의 최상위 디렉터리로 이동하여 다음 명령을 사용하세요.
./bootstrap.sh --install
부트스트랩 스크립트는 수퍼유저 권한을 요청할 수 있습니다.
완료!
이미 phasar를 구축했다면 그냥 호출하면 됩니다.
sudo ninja install
cmake
사용하여 phasar를 라이브러리로 사용하는 것이 좋습니다.
이미 phasar를 설치했다면 Use-PhASAR-as-a-library를 시작하는 것이 좋습니다.
그렇지 않으면 PhASAR을 저장소에 git 하위 모듈로 추가하는 것이 좋습니다. 이 경우 CMakeLists.txt
내의 phasar 하위 모듈 디렉터리를 add_subdirectory
하세요.
external/phasar
에서 phasar를 체크아웃했다고 가정하면 phasar 관련 cmake 명령은 다음과 같습니다:
add_subdirectory (external/phasar EXCLUDE_FROM_ALL ) # Build phasar with your tool
...
target_link_libraries (yourphasartool
...
phasar # Make your tool link against phasar
)
PhASAR 사용에 따라 빌드에 LLVM을 추가해야 할 수도 있습니다.
자세한 내용은 PhASAR 위키 페이지를 참조하세요.
PhASAR을 사용하고 있으며 앞으로 우리를 돕고 싶으십니까? 그렇다면 이 웹 양식을 작성하여 지원해 주세요.
피드백을 제공함으로써 PhASAR가 미래에 어떤 방향으로 나아가야 할지 결정하는 데 도움이 되고 사용자 기반에 대한 단서를 제공할 수 있습니다. 매우 감사합니다!
PhASAR 프로젝트에 기여해 주셔서 대단히 환영합니다. 커밋이 PhASAR 프로젝트의 가장 중요한 코딩 규칙을 준수하도록 보장하는 사전 커밋 후크를 설치했는지 확인하세요. 자세한 내용은 코딩 규칙 및 PhASAR에 기여를 참조하세요.
사전 커밋 후크를 설치하려면 PhASAR의 루트 디렉터리에서 다음 명령을 실행하세요:
pip install pre-commit
pre-commit install
감사해요. 그리고 프로젝트를 재미있게 즐겨보세요.