首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从组装生成控制流图?

如何从组装生成控制流图?
EN

Stack Overflow用户
提问于 2013-07-18 13:25:33
回答 1查看 1.6K关注 0票数 1

对于上下文,我正在尝试编写一个从AVM2 (ActionScript虚拟机2)字节码/汇编到高级ActionScript 3代码的反编译器。据我所知,这需要我分析程序集并由此生成结果控制流图,以便推导出循环和条件分支(if/else)等结构。

给定一些程序集,如:

代码语言:javascript
运行
复制
0         getlocal0         
1         pushscope         
2         findpropstrict    {, private, }::trace
4         pushstring        "one"
6         callproperty      {, private, }::trace (1)
9         pop               
10        pushbyte          5
12        pushbyte          3
14        ifngt             L1

18        findpropstrict    {, private, }::trace
20        pushstring        "two"
22        callproperty      {, private, }::trace (1)
25        pop               

L1: 
26        findpropstrict    {, private, }::trace
28        pushstring        "three"
30        callproperty      {, private, }::trace (1)
33        coerce_a          
34        setlocal1         
35        getlocal1         
36        returnvalue       
37        kill              1

什么是生成控制流图的算法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-27 18:59:25

我想通了。基本上,保留一个标签列表(在我的例子中,标签是数组中指令的索引)。标签之间的每个指令列表都是块(它们是图中的顶点)。在每个分支之后标记指令(这样分支就是块的最后一条指令,这样你就可以知道它是哪种边了。或者,您可以将分支类型标记到边缘。),以及每个分支的目标。

一旦你有了标签,就把它们分成块。我循环遍历标签中的每个排序索引,如果最后一个块的最后一条指令是分支,则向目标添加一条边。如果没有,我会将它的一条边添加到当前块中(作为落差节点)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17715147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档