Можно ли перевести язык ассемблера в LLVM IR, оптимизировать его, а затем перекомпилировать под другую архитектуру?

Можно ли перевести язык ассемблера в LLVM IR, оптимизировать его, а затем перекомпилировать под другую архитектуру? Как бы вы справились с «push» и «pop» в стеке в IR? Это самое простое возражение, которое я нашел, но я уверен, что таких масса.

Я планирую построить динамический рекомпилятор, и кажется, что это было бы отличным решением, так как LLVM автоматически оптимизировал бы мой код под новую архитектуру. Возможно ли все это с LLVM?

Спасибо


person Francesco Boffa    schedule 27.11.2011    source источник


Ответы (3)


Это аналогичный вопрос: Перекомпилируйте код x86 с помощью LLVM в более быстрый x86

Ответ заключается в том, что LLVM не может сделать это напрямую, но может использоваться как часть инструмента, который это делает.

person Richard Pennington    schedule 27.11.2011

Это возможно.

Но вам нужно разработать некоторую кодовую базу LLVM для реализации процесса перевода языка ассемблера в LLVM IR. Затем LLVM может помочь вам оптимизировать и создать новую архитектуру.

Итак, дело в том, что вам нужно разработать транслятор, который может переводить язык ассемблера в LLVM IR. Я видел, как кто-то уже это делал, вы можете поискать на сайте.

person shining    schedule 26.06.2013

Вы можете попытаться создать символическое представление программы, которую хотите оптимизировать, а затем использовать такой инструмент, как Arybo для преобразования символьных выражений в LLVM IR.


Джонатан Салван делает это в своем репозитории Tigress_Protection, где он демонстрирует, как деобфускировать виртуальные машины с помощью символьного выполнения и анализа заражений. с помощью своего инструмента Triton для получения символического представления программы и с помощью Arybo, он преобразует символьные выражения в LLVM IR, чтобы применить некоторые оптимизации. Я полагаю, что это один из способов сделать это.

person op325    schedule 15.12.2020