bin2llvm
1.0.0
이것은 S2E 기반 바이너리--llvm 번역기입니다. 이진 코드를 LLVM 코드로 변환합니다. 결과 LLVM 모듈에는 기능이 포함되어 있습니다. 일부, 제어 흐름 세부 사항이 복구됩니다.
아이디어는 S2E의 구성 요소를 재사용하여 LLVM으로 변환하는 것입니다. Rougly, QEMU는 이진에서 TCG로 번역하고 S2E는 TCG에서 LLVM으로 번역됩니다. 이진의 재귀 분해를 수행하기 위해 플러그인을 추가 하였다. 그런 다음 원시 LLVM 코드는 외부 LLVM 패스 세트로 공급됩니다. 이 단계의 목적은 추출 된 코드에 대한 자세한 내용을 추가하는 것입니다. 구체적으로 기본 블록은 함수로 그룹화됩니다. 주로 팔 아키텍처에서 테스트됩니다. BIN2LLVM 은 최선의 노력 도구이며 가능한 한 많이 번역 한 다음 LLVM 코드를 최종 파일에 연결하려고합니다.
$ docker pull docker.io/cojocar/bin2llvm
$ # run one example binary
$ docker run --rm -t docker.io/cojocar/bin2llvm /bin/bash -c " /usr/local/bin2llvm/bin/bin2llvm.py --file /usr/local/bin2llvm/bin/ls-example "
$ # run the tests
$ docker run --rm -t docker.io/cojocar/bin2llvm /bin/bash -c " cd /usr/local/bin2llvm/tests; BIN2LLVM_INSTALL_DIR=/usr/local/bin2llvm make; " 종속성 목록은 dockerfile을 참조하십시오.
$ ./scripts/setup.sh # this will copy some dependencies in the third_party directory
$ ./scripts/build.sh ../bin2llvm-build
$ ./scripts/install.sh ../bin2llvm-build ../bin2llvm-install$ ./scripts/build_docker.sh 이로 인해 bin2llvm-dev 와 bin2llvm-release-squashed 이미지가 생깁니다.
$ cd ../bin2llvm-install && ./bin/bin2llvm.py --file ./bin/ls-example
Press Ctrl+C
INFO:bin2llvm:Using /tmp/bin2llvm-W4yJvU as temp_dir
INFO:bin2llvm:Use entry: 0x00009a74
INFO:bin2llvm:Use entry: 0x00009fa8
INFO:bin2llvm:Use entry: 0x0000c470
INFO:bin2llvm:Use entry: 0x0000c4d0
INFO:bin2llvm:Use entry: 0x0000c514
INFO:bin2llvm:Use entry: 0x0000c560
....
INFO:bin2llvm:Use entry: 0x00000000
WARNING:bin2llvm:(passes) crashed with entry: 0x00000000
INFO:bin2llvm:FINAL output is in /tmp/bin2llvm-W4yJvU/final.bc (370 functions) 최종 비트 코드는 ${OUT_DIR}/final.bc 입니다
$ cd ./tests && BIN2LLVM_INSTALL_DIR= $( realpath ../../bin2llvm-install ) make자세한 내용은 테스트 디렉토리를 참조하십시오.
다음 작품은 bin2llvm을 사용합니다.