Значение доминант в реверс-инжиниринге

Наткнулся на этот вопрос: объяснить роль доминант в реверс-инжиниринге Java-кода.

Все, что я могу придумать, это то, что вам нужно уметь вычислять доминаторы в контрольном графике, чтобы увидеть, можно ли его привести:

  1. Работайте над доминаторами
  2. Определить и удалить задние края
  3. Проверьте, является ли оставшийся граф ациклическим

Если граф ацикличен - это приводимо. Поэтому все петли являются естественными петлями. Если это не сводится, то код неструктурирован или оптимизирован.

Это звучит правильно для вас?

1 ответ

Решение

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

Ключевым понятием является то, что если X доминирует над Y, когда Y выполняется, X уже выполнен. Поэтому, если вы хотите понять, что делает Y, а Y зависит от контекста, в котором он выполняется, вам, вероятно, понадобится понять X.

Есть и другие вещи, которые вы должны понимать, такие как потоки данных в Y, входные данные программы и т. Д. Просто это полезное место для начала.

Существует множество алгоритмов анализа, использующих доминаторы, каждый из которых отвечает на конкретные вопросы. Трудно утверждать, что любая из них является "ключевой" ролью, которую играют доминаторы.

Другие вопросы по тегам