전체 글 (20) 썸네일형 리스트형 python코드 IR에 KLEE함수 삽입 후 실행 python코드로부터 얻은 IR에 수작업으로 KLEE를 삽입해보고자 한다. 1.python코드로 부터 IR코드 추출 사용한 파이썬 코드 import numba as nb @nb.jit(nopython=True) def add(num): num += num return num @nb.jit(nopython=True) def mul(num): num *= 2 return num @nb.jit(nopython=True) def main(): num = 10 add_result = add(num) mul_result = mul(num) if __name__ == "__main__": main() numba test.py --dump-llvm > testpy.ll 파이썬 코드로부터 IR코드를 추출한다. 2. 추출.. c코드 IR에 KLEE함수 삽입 후 실행 c언어로 짜여진 코드로부터 얻은 IR에 수작업으로 KLEE를 사용하도록 수정하자. 실험에 사용할 test.c #include int addResult; int mulResult; int addNum(int num) { num += num; return num; } int mulNum(int num) { num *= 2; return num; } int main() { int num; addResult = addNum(num); mulResult = mulNum(num); return 0; } addNum함수와 mulNum함수는 모두 입력 값에 두 배를 결과로 반환하는 함수이다. 따라서 코드는 다르게 작성되었지만 기능적으로는 같은 함수이다. 매개변수를 symbolic하게 만들고 두 함수가 동일하지 않다는 .. docker로 klee사용하기 Docker란, Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼이다. 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램이다. 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함되어 있다. 1. wsl에 docker 다운로드하기 https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository Install Docker Engine on Ubuntu Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and .. wsl Ubuntu를 이용해 llvm안에서 z3 사용 1) z3 빌드 git clone https://github.com/Z3Prover/z3.git GitHub - Z3Prover/z3: The Z3 Theorem Prover The Z3 Theorem Prover. Contribute to Z3Prover/z3 development by creating an account on GitHub. github.com cd z3 python scripts/mk_make.py cd build sudo make install 2) z3pass 폴더 생성 \llvm-project-llvmorg-12.0.0\llvm\lib\Transforms\z3pass에 z3pass를 생성한다. z3pass안에 .cpp 파일 CMakeLists.txt 파일 헤더파일을 담는다. CM.. llvm-as 오류 해결 & Z3 빌드 1) llvm-as 어셈블 과정에서 Segmentation Fault 발생 파이썬 코드의 .ll파일로 부터 .bc파일을 산출하는 명령어 패스를 적용시키기 위해서 .bc파일이 필요하기 때문에 필요. Segmentation Fault오류가 발생한 원인을 찾으려고 했다. 오류가 발생하지 않았던 다른 팀원과는 프로그램 버전이나 다른 요소들의 차이가 거의 없었다. 처음부터 다시 시작하기 위해서 다른 버전의 우분투를 사용해봤다. Ubuntu 18.04버전을 사용해서 빌드를 시도했다. 18.04버전에서 사용 가능한 cmake버전이 너무 낮아서 해당 명령어를 실행할 수가 없었다. update도 해보고 높은 버전의 cmake도 수동으로 다운받아봤지만 제대로 설치가 되지않아 계속 같은 오류가 발생했다. 어쩔 수 없이 높은.. python ir에 llvm pass 적용 1. 파이썬 코드를 이용해 .ll 파일 만들기 numba testArr.py --dump-llvm > testArr.ll 파이썬 라이브러리 numba를 사용해서 .py 파일의 .ll 파일을 생성한다. 2. .ll 파일(IR)을 이용해 .bc 파일(바이트코드) 만들기 sudo llvm-as testArr.ll -o result.bc .c 파일에 llvm pass를 적용하기 위해 필요했던 .bc (바이트코드)를 만든다. 3. llvm pass를 적용하기 위해 필요한 파일 NamePrinter.so result.bc 파일 4. 패스 적용하기 opt -load ./NamePrinter.so -NamePrinter result.bc -o testArr.bc IR에서 함수명을 출력하는 NamePrinter 패스를 .. llvm 빌드 오류 해결 + llvm pass 사용하기 1. llvm "fatal error : id terminated with signal 9 [killed]" 오류 해결 llvm 빌드 와중에 84%에서 지속적으로 발생했다. wsl에서 사용하는 메모리가 부족해서 빌드가 정상적으로 완료되지 않았다. C:\Users\사용자명 위치에 .wslconfig 파일을 만들어 wsl가 사용하는 메모리 값을 조정할 수 있다. 2GB였던 swap값을 8GB로 바꿔주니 빌드에 성공했다. free -h명령어를 사용해 이 전과 달라진 메모리 사용량을 확인 할 수 있다. 2. 플러그인 사용하기 1) .cpp파일과 .h파일을 이용해서 플러그인 파일이 .so파일을 만든다. make 2) test.c를 바이트코드로 변환시킨후 llvm ir로 변환한다. clang -c -emit-llv.. llvm 프로젝트 시작하기(1) 1. llvm 프로젝트 다운로드 wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-12.0.0.zip 터미널을 이용해 github에 있는 llvm 프로젝트를 다운로드한다. 2. 빌드 1 ) 프로젝트와 같은 디렉토리에 build폴더를 생성한다. mkdir build 2 ) build폴더 안의 위치에서 cmake [llvm 프로젝트안의 llvm폴더의 경로] 를 입력한다. cd build cmake [llvm 프로젝트안의 llvm폴더의 경로] ex ) cmake ./../llvm-project-llvmorg-12.0.0/llvm 성공적으로 명령어가 종료되면 build폴더 안에 위와 같은 파일들이 생성된다. 3 ) llvm 프로젝트를 전역에.. 이전 1 2 3 다음