Ini adalah penerjemah biner-to-llvm berbasis S2E. Ini mengubah kode biner ke kode LLVM. Modul LLVM yang dihasilkan berisi fungsi. Beberapa, detail aliran kontrol dipulihkan.
Idenya adalah untuk menggunakan kembali komponen dari S2E untuk mencapai terjemahan ke LLVM. Rougly, Qemu diterjemahkan dari biner ke TCG dan S2E diterjemahkan dari TCG ke LLVM. Plugin ditambahkan untuk melakukan pembongkaran biner rekursif. Kode LLVM mentah kemudian diumpankan ke satu set tiket LLVM eksternal. Tujuan dari langkah ini adalah untuk menambahkan lebih banyak detail tentang kode yang diekstraksi, secara konkret, blok dasar dikelompokkan dalam fungsi. Ini terutama diuji pada arsitektur lengan. Bin2LLVM adalah alat upaya terbaik, ia akan mencoba menerjemahkan sebanyak mungkin dan kemudian menautkan kode LLVM dalam file akhir.
$ 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; " Konsultasikan dengan Dockerfile untuk daftar dependensi.
$ ./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 Ini akan menghasilkan bin2llvm-dev dan dalam gambar 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) Kode bit terakhir adalah ${OUT_DIR}/final.bc
$ cd ./tests && BIN2LLVM_INSTALL_DIR= $( realpath ../../bin2llvm-install ) makeLihat Direktori Tes untuk lebih jelasnya.
Karya -karya berikut menggunakan Bin2LLVM :