Изменения

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

3 байта добавлено, 14:20, 29 марта 2011
м
Нет описания правки
** Если добавили какой-то узел и единственная точка входа изменилась, идём нафиг — цикл из изначального узла не растёт.
*: Когда залезаем в цикл, переходы на начало и выход из цикла заменяем на continue и break для удобочитаемости.
* Условный оператор:** <br /> Если что-то откуда-то ветвится и это не цикл, это условный оператор :)*: <br /> Транслировать его следует так:*:* Ищем точку сбора всех веток, выходящих из начального узла (узел, в котором все они объединяются).*:* Залезаем в каждую ветку, всё обрабатываем точно так же, как до этого, и точно так же (в обработке линейных участков и циклов тоже помечаем).*:* Помечаем пройденные узлы как обработанные.*:* Когда где-то видим уже обработанный узел, заменяем переход к нему на goto. То есть, if «без дублирования» кусков веток будет «нормальным», без goto.
*: Пример «плохого» if’а: 0->1->3->4, 0->2->3, 0->4, 0->5->4.
*: <graph>digraph G { 0->1->3->4; 0->2->3; 0->4; 0->5->4; }</graph>
Всё это соответствует стандартной теории декомпиляции, см. например http://www.backerstreet.com/decompiler/creating_statements.php