هذا هو مترجم ثنائي القائم على S2E. يحول أي رمز ثنائي إلى رمز LLVM. تحتوي وحدة LLVM الناتجة على وظائف. بعض ، يتم استرداد تفاصيل تدفق التحكم.
والفكرة هي إعادة استخدام المكونات من S2E لتحقيق الترجمة إلى LLVM. Rougly ، QEMU يترجم من ثنائي إلى TCG و S2E ترجمات من TCG إلى LLVM. تمت إضافة المكونات الإضافية لأداء التفكيك العودية للثنائي. ثم يتم تغذية رمز LAW 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 :