นี่คือนักแปลไบนารีถึง LLVM ที่ใช้ S2E มันแปลงรหัสไบนารีใด ๆ เป็นรหัส 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 :