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