ARM-декомпилятор
Материал из YourcmcWiki
Версия от 11:21, 29 марта 2011; VitaliyFilippov (обсуждение | вклад) (переименовал «Блог:Виталий Филиппов/2011-03-25 ARM-декомпилятор» в «ARM-декомпилятор»)
Задумавшись о "простеньком плагинчике" для исключения тупой ручной работы в IDA - для "трассировки констант", пришёл к выводу, что я изобрёл велосипеддекомпилятор, и что не такая уж это и сложная вещь - декомпилятор.
Весь его смысл в том и есть, чтобы проанализировать возможные пути выполнения внутри каждой функции, выделить циклы и условные операторы, а потом запоминать выражения, записываемые в регистры, и подставлять их в последующие операции. Конечно, не всё так просто, если его всерьёз писать, наверняка появятся и другие проблемы, но основная суть всё равно здесь описана.
По сути 3 типа блоков:
- Цикл
- Условный
- Линейный
Все 3 имеют по одной точке входа. Т.е. для их выделения начинаем с какого-то узла, дальше
- линейный: добавляем узел, если за текущим следует только 1 и тот не разветвляется
- цикл: если через текущий узел проходит цикл, добавляем в него этот цикл, потом добавляем также все циклы, проходящие через добавленные узлы
- условный: если узел раздваивается и через него не проходит цикл, можно добавить к нему дочерние.