2013-06-25 2 views
1

Учитывая произвольный исполняемый файл, можно ли определить некоторые или все адреса назначения непрямой ветви? Что такое программный подход к вычислению этих направлений? Я спрашиваю, потому что я реконструирую CFG из исполняемого файла и не могу определить чистый способ вычисления косвенных ветвей. Иногда операнд может быть определен с небольшим судебно-медицинским анализом, но в других случаях это не так ясно.Расчет назначения косвенного перехода

+0

Вы говорите о пунктах назначения, которые не найдены при разборке? в основном используют симулятор набора инструкций. Или просто анализ. Некоторые из них вы не сможете полностью решить (без моделирования всех реальных кодов кода). –

+0

Можно ли это сделать только со статическим анализом? – RouteMapper

ответ

2

Расчет возможных непрямых направлений ветвления в скомпилированной программе статически возможно путем выполнения data-flow analysis для выяснения возможных значений для адреса.

Это может сработать на простых вещах, таких как jump tables (тип материала, часто генерируемый операторами switch).

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