如何使用AST生成程序的控制流图(CFG)? 很明显题主是在做一个PHP的漏洞分析工具,https:// github.com/OneSourceCat /phpvulhunter 然后题主介绍它的文章: 使用PHP-Parser生成AST抽象语法树 浅谈PHP自动化代码审计。
软件测试中,控制流图和控制流程图一样么??如果不一样,区别是什么?? 控制流图表示的是一个程序里各个模块的分类和关,每个在图形中的节点代表一个基本块。控制流程图就是操作程序的过程和方法,是实现控制流图效果的过程中用到的所有控件的使用过程与关系。希望对你有帮助
编译原理中的数据流(data-flow)分析与控制流(control-flow)分析有何区别? 控制流分析的目的是根据程序中的跳转语句构造一个表达程序结构的控制流图。数据流分析可以在控制流图的基…
控制流图的控制流图细述 控制流图中每个在图形中的节点代表一个基本块,例如,没有任何跳跃或跳跃目标的直线代码块;跳跃目标以一个块开始,和以一个块结束。定向边缘被用于代表在控制流中的跳跃。在那里,在大部分介绍中,两个特定的设计块:项目块,通过它控制到流图的输入,和编辑块,通过它全面控制流输出。
如何使用AST生成程序的控制流图 对一个有结构化编程特性的编程语言而言,抽象语法树(AST)与“流分析”(flow analysis)不够兼容的地方在于:这些编程语言会有分支、循环、跳转(break/continue,或者像C#那样受限的goto)、异常处理等语法结构,它们隐含了不连续的控制流;而AST的结构虽然已经省略了一些语法细节,但仍然贴近语言的语法,所以AST里控制流往往是隐含在上述语法结构对应的节点里。更糟糕的是,这些编程语言中许多都有条件表达式(典型的是?三元运算符)以及带有短路求值语义的逻辑运算表达式(典型的是&、|二元运算符),这些“表达式”内也隐含控制流,更是藏得深。所以正统做法推荐的是在做数据流分析之前,先把AST转换为一种更细粒度的、把控制流显式暴露出来的中间表示(IR)。虎书教的做法正是如此,第7章介绍从AST生成IR,第8章介绍了IR里的控制流与基本块。前面@vczh 和@陈炜 的回答都提到了这一点。邵成 的回答提到龙书第8~9章,我觉得把第6章(特别是6.6 Control Flow)也包括进来更好。对数据流分析来说,IR无论是树形、DAG还是线性形式都没关系,只要控制流和数据依赖易于分析就好。SSA形式的IR可以把两者都显式暴露出来,特别是use-def关系(并且有些IR会额外维护def。