特定のコードの実行中にプログラムカウンターが取る一連の値があります。これを使用して、この実行可能ファイルを生成した元のコードの静的分析を行いたいと思います(明確にするために:元のコードは利用できません)-特に、ループの数とそれらがどのようにネストされているか。例を挙げると、
A: for()
B: if ()
C: ...
D: else
E: ...
F: for () {
G: ...
H: ...
I: }
この場合、プログラムカウンターシーケンスは次のようになります。ABCDF{GHIGHIGHI} ABDEF {GHIGHI} ABDEF {GHIGHIGHIGHI}
上記のシーケンスから、2つのループがあり、一方が他方の中にネストされていることをどのように理解できますか?使用する適切な構文解析手法へのポインタも役立ちます。
元のコードにgotoがない、コンパイラーに最適化されたループ展開がないなど、いくつかの単純化された仮定を行うことができます。