Dies ist ein S2E-basierter Binär-zu-LlVM-Übersetzer. Es wandelt jeden Binärcode in den LLVM -Code um. Das resultierende LLVM -Modul enthält Funktionen. Einige Kontrollflussdetails werden wiederhergestellt.
Die Idee ist, Komponenten von S2E wiederzuverwenden, um die Übersetzung auf LLVM zu erreichen. Rougly, QEMU übersetzt von Binary zu TCG und S2E übersetzt von TCG zu LLVM. Plugins wurden hinzugefügt, um die rekursive Demontage der Binärdatei durchzuführen. Der Roh -LLVM -Code wird dann an eine Reihe externer LLVM -Pässe versetzt. Der Zweck dieses Schritts ist es, weitere Details zum extrahierten Code hinzuzufügen. Konkret werden grundlegende Blöcke in Funktionen gruppiert. Es wird hauptsächlich auf der Armarchitektur getestet. Bin2llvm ist ein bester Anstrengentool. Es wird versuchen, so viel wie möglich zu übersetzen und dann den LLVM -Code in einer endgültigen Datei zu verknüpfen.
$ 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; " Wenden Sie sich an die Dockerfile, um die Liste der Abhängigkeiten zu erhalten.
$ ./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 Dies führt zu bin2llvm-dev und in bin2llvm-release-squashed Freisetzungsbildern.
$ 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) Der endgültige Bitcode ist ${OUT_DIR}/final.bc
$ cd ./tests && BIN2LLVM_INSTALL_DIR= $( realpath ../../bin2llvm-install ) makeWeitere Informationen finden Sie im Testverzeichnis.
Die folgenden Arbeiten verwenden Bin2llvm :