Учитывая произвольный исполняемый файл, можно ли определить некоторые или все адреса назначения непрямой ветви? Что такое программный подход к вычислению этих направлений? Я спрашиваю, потому что я реконструирую CFG из исполняемого файла и не могу определить чистый способ вычисления косвенных ветвей. Иногда операнд может быть определен с небольшим судебно-медицинским анализом, но в других случаях это не так ясно.Расчет назначения косвенного перехода
1
A
ответ
2
Расчет возможных непрямых направлений ветвления в скомпилированной программе статически возможно путем выполнения data-flow analysis для выяснения возможных значений для адреса.
Это может сработать на простых вещах, таких как jump tables (тип материала, часто генерируемый операторами switch).
В общем случае, я думаю, что из этого будет довольно сложно получить достойные результаты - особенно, поскольку я подозреваю, что вашему анализу потребуется какой-то анализ кучи, чтобы быть любой ценностью, и это нелегко, особенно на сборке, которая может быть пронизана нагрузками и запасами в память.
Вы говорите о пунктах назначения, которые не найдены при разборке? в основном используют симулятор набора инструкций. Или просто анализ. Некоторые из них вы не сможете полностью решить (без моделирования всех реальных кодов кода). –
Можно ли это сделать только со статическим анализом? – RouteMapper