我有程序计数器在执行特定代码时采用的值序列。使用它,我想对生成这个可执行文件的原始代码进行一些静态分析(要清楚:原始代码不可用)——特别是那里有多少个循环,以及它们是如何嵌套的。举个例子,
A: for()
B: if ()
C: ...
D: else
E: ...
F: for () {
G: ...
H: ...
I: }
在这种情况下,程序计数器序列可能是: ABCDF {GHIGHIGHI} ABDEF {GHIGHI} ABDEF {GHIGHIGHIGHI}
从上面的序列中,我怎么知道有两个循环,一个嵌套在另一个循环中?只是指向要使用的适当解析技术的指针也会有所帮助。
可以进行一些简化假设,例如原始代码中没有 goto 和编译器优化的循环展开。