【发布时间】:2017-12-08 00:02:32
【问题描述】:
我编写了一个实用程序来为 java 方法创建 CFG(控制流图),其节点是基本块而不是指令。
我不能将异常抛出视为 CFG 中的边缘。原因是:
- try 块中的每条指令都可能引发异常/错误,这些异常/错误可由任何嵌套的 try-catch 块处理。如果我们将异常抛出视为边缘,则处理路径的数量会急剧增加,CFG 中的节点数量也会增加。
- 我们需要先了解异常的继承层次结构,然后才能决定可以进行哪些跳转。
静态代码分析器如何解决这个问题?
我被困在这一点上。如果我必须继续,我应该怎么做?
编辑:在我的例子中,我可以将支持限制在那些可以指定抛出异常的位置和异常的用例。这解决了我的第二个问题。我仍然想知道通用静态代码分析器是如何管理这个的。
【问题讨论】:
-
懒得查了——CFG代表什么?
-
@GhostCat en.wikipedia.org/wiki/Control_flow_graph ; “使用图形符号表示在程序执行期间可能遍历程序的所有路径。”
标签: java decompiler