1 个不稳定版本
0.1.0 | 2023年3月12日 |
---|
#286 in 可视化
16KB
147 行
什么是 ctrl-flow?
ctrl-flow 是一个库,它使得实现控制流图变得容易。
它主要针对虚拟机、解释器或仿真器的创建者。
这只是一个用于构建控制流图的基础框架,然后用户需要将其导出为其他格式。未来版本将提供一些格式,但将作为可选功能。
欢迎提交优化或改进库的拉取请求.
如何使用它?
首先,只有两种类型可以对控制流图进行操作。 Instruction
和 Jump
。
您必须将运行时执行的指令转换为 BlockType
,具体取决于指令如何影响控制流。 Instruction
包含一个名称和可选的操作数。一个 Jump
包含一个名称、成功地址、JumpType
和失败地址。在条件 JumpType
的情况下,失败地址是必需的。
在 Jump
中的 JumpType
可以是三种之一: UnconditionalJump
、ConditionalTaken
和 ConditionalNotTaken
。
构建 BlockType
后,您可以使用当前程序计数器使用执行命令对图产生影响。
要导出控制流图,您可以使用提供的迭代器将其导出为您的格式。在未来的版本中,这些格式将提供,但作为可选功能。
非目标
实现和维护五千种不同的输出格式
开关语句?也许...
依赖关系
~310–770KB
~18K SLoC