bin2llvm
1.0.0
這是一個基於S2E的二進制二進制轉換器。它將任何二進制代碼轉換為LLVM代碼。所得的LLVM模塊包含功能。有些,控制流詳細信息將恢復。
這個想法是將組件從S2E重用,以實現轉換為LLVM。 ROGLY,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 :