bin2llvm
1.0.0
これは、S2EベースのバイナリからLLVMへの翻訳者です。バイナリコードをLLVMコードに変換します。結果のLLVMモジュールには関数が含まれています。一部のコントロールフローの詳細が回復されます。
アイデアは、S2Eのコンポーネントを再利用して、LLVMへの翻訳を達成することです。 Rougly、QemuはバイナリからTCGに翻訳され、S2EはTCGからLLVMに変換されます。バイナリの再帰分解を実行するために、プラグインが追加されました。 RAW 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を使用しています。