binrec은 2020년 eurosys에서 발표된 동적리프터다
실행파일을 입력으로 받아 S2E(symbolic execution engine)를 사용해서 LLVM-IR로 리프팅해주는 툴이다
binrec의 git repo.
clone 받아오면된다
https://github.com/trailofbits/binrec-tob.git
Dependency로 해당 조건들을 가지고 있다
ubuntu 버전이 다르면 빌드는 되는데 Lifting이 작동하지 않으니...버전을 꼬오옥 맞춰야한다(경험담)ㅜㅜ
(참고) 원하는 LLVM 버전 빌드하기
1. llvm-project를 clone 한다
- git clone https://github.com/llvm/llvm-project.git
1-1. 원하는 버전이 있다면 checkout으로 원하는 버전을 가져와준다
- llvm-project 폴더에서 git tag -l으로 버전들을 확인한다
- 원하는 버전을 git checkout <원하는버전> 으로 가져온다
- ex) git checkout llvmorg-14.0.0
2. build 폴더를 llvm-project 폴더 안에 만들어준다
3. build 폴더를 들어가 준다
4. cmake -G <generator> [options] ../llvm 를 실행해준다. 이때 <generator>는 보통 Ninja, Unix Makefiles 등을 사용하며, 옵션은 -DCMAKE_BUILD_TYPE=type 등이 있다.
- ex) cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ../llvm
- 이때 clang도 같이 빌드하고 싶으면 -DLLVM_ENABLE_PROJECTS="clang" 이런식으로 옵션을 추가해주면된다~!
5. build 폴더에 생긴 빌드 파일로 빌드를 진행하면 된다
- Makefile로 진행했을시 make 실행
참쉽죠잉
이제 binrec을 빌드해보도록 하자
git clone을 받고 just라는 build system을 사용해서 build를 해주면 되는데,..
일단
./get_just.sh를 입력하면, just가 설치된다
그리고 레포에 들어가보면 justfile이란 것이 존재할 것이다. 해당 파일이 Makefile같은 역할을 하는 파일이다.
2번째에 있는 just install-binrec이 해당 부분을 의미한다.
install-binrec을 실행하면 옆에 5가지 명령어가 실행되는 것이다...
근데 이 명령어들 중 에러가 있으면 설치하다가 멈추곤 하는데..연속실행이 되면 어디서 오류가 났는지 찾기 힘들다
그래서 추천하는 방법은 just install-binrec으로 실행하지말고
just _install-dependencies
just _binrec-init
. . .
이렇게 실행해가면서 어디서 오류가 났는지 확인하고 하나씩 고치는 것을 추천한다..
그럼 이제 에러해결을 해보자
1. _install-dependencies
해당 명령어는 lifter가 필요한 패키지들을 설치하는 명령어다.
실행하면
문제가 없다면 다행이지만 패키지설치가 안되는경우엔 이런식으로 죽는다
그러면 패키지 설치법을 찾아서 수동으로 설치를 해주고 다시 실행해보면된다!
2. _binrec-init
첫번째로 실행하는 명령어는 vmlinu* 파일이 존재해야한다
컨테이너같은경우엔..해당 파일들이 존재하지 않을 수 있으니 확인하고 실행하는걸 추천한다..
이후 에러내용은............화나서 혼자 빌드하느라 사진이 없어짐..
혹시나 에러해결이안되면...... 댓글주세요 시도한 범위 내에 있는 에러면 최선을 다해 답해볼게요^^...(별 에러 다본사람)