Изменения

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

26 байтов добавлено, 08:58, 30 марта 2011
м
Нет описания правки
== Начальный анализ ==
Потом стало ясно, что парсить вывод IDA (листинги)  — занятие тяжкое и приносящее малый профит, и в случае ARM точно лучше использовать objdump, хотя он и не является рекурсивным дизассемблером. Вообще, в случае ARM всё ну очень просто, так как любая инструкция занимает 4 байта и всегда выровнена на границу 4 байт. Поэтому натравленный на файл objdump всегда дизассемблирует его корректно, только некоторые «инструкции», которые на самом деле не инструкции, нужно будет заменить на данные.
Поэтому сначала делаем начальный анализ:
== Выделение блоков ==
Далее нужно перейти к выделению блоков — то есть, циклов и условных операторов - операторов — тому, что обычно называют "структурированием"«структурированием», т.е. то есть воссозданием программы из линейного листинга:
=== Циклы ===
У любого цикла есть точка входа, на которую можно поставить метку "continue"«continue», т.к. так как оператор "continue" «continue» как раз на неё и переходит, и стандартная точка выхода, на которую можно аналогично поставить метку "break"«break». Внутри цикла переходы на точки входа и выхода для удобочитаемости нужно заменять на continue и break.
Цикл: