Изменения

Перейти к: навигация, поиск

ARM-декомпилятор

1897 байтов добавлено, 06:09, 25 марта 2011
м
Новая страница: «Задумавшись о "простеньком плагинчике" для исключения тупой ручной работы в IDA - для "трасс...»
Задумавшись о "простеньком плагинчике" для исключения тупой ручной работы в IDA - для "трассировки констант", пришёл к выводу, что я изобрёл <s>велосипед</s>декомпилятор, и что не такая уж это и сложная вещь - декомпилятор.

Весь его смысл в том и есть, чтобы проанализировать возможные пути выполнения внутри каждой функции, выделить циклы и условные операторы, а потом запоминать выражения, записываемые в регистры, и подставлять их в последующие операции. Конечно, не всё так просто, если его всерьёз писать, наверняка появятся и другие проблемы, но основная суть всё равно здесь описана.

По сути 3 типа блоков:
* Цикл
* Условный
* Линейный

Все 3 имеют по одной точке входа. Т.е. для их выделения начинаем с какого-то узла, дальше
* линейный: добавляем узел, если за текущим следует только 1 и тот не разветвляется
* цикл: если через текущий узел проходит цикл, добавляем в него этот цикл, потом добавляем также все циклы, проходящие через добавленные узлы
* условный: если узел раздваивается и через него не проходит цикл, можно добавить к нему дочерние.

Навигация