1

この質問に出くわしました: Java コードのリバース エンジニアリングにおけるドミネーターの役割を説明してください。

私が考えることができるのは、コントロール グラフでドミネーターを計算して、それが削減可能かどうかを確認できる必要があるということだけです。

  1. ドミネーターを鍛える
  2. バック エッジを特定して削除する
  3. 残りのグラフが非循環かどうかを確認する

グラフが非環状の場合 - 可約です。したがって、すべてのループは自然なループです。還元できない場合、コードは構造化されていないか、最適化されています。

この音はあなたにとって正しいですか?

4

1 に答える 1

2

特殊なケースとしてリバース エンジニアリングを行っているかどうかにかかわらず、ドミネーターがプログラム分析で興味深い理由はさまざまです。

重要な概念は、X が Y を支配している場合、Y が実行されるとき、X は既に実行されているということです。したがって、Y が何をしているのかを理解したい場合、そして Y はそれが実行されるコンテキストに依存するため、おそらく X を理解する必要があります。

他にも、Y へのデータフロー、プログラム入力など、理解する必要があることがあります。ここから始めると便利です。

ドミネーターを使用する分析アルゴリズムは多数あり、それぞれが特定の種類の質問に答えます。これらのいずれかが、ドミネーターが果たす「(重要な) 役割」であると主張するのは困難です。

于 2012-05-11T21:05:18.673 に答える