#control-flow #graph #emulator #visual

ctrl-flow

一个适用于实现和控制流图的跨平台、易于使用的库

1 个不稳定版本

0.1.0 2023年3月12日

#286 in 可视化

自定义许可证

16KB
147

什么是 ctrl-flow?

ctrl-flow 是一个库,它使得实现控制流图变得容易。

它主要针对虚拟机、解释器或仿真器的创建者。

这只是一个用于构建控制流图的基础框架,然后用户需要将其导出为其他格式。未来版本将提供一些格式,但将作为可选功能。

欢迎提交优化或改进库的拉取请求.

如何使用它?

首先,只有两种类型可以对控制流图进行操作。 InstructionJump

您必须将运行时执行的指令转换为 BlockType,具体取决于指令如何影响控制流。 Instruction 包含一个名称和可选的操作数。一个 Jump 包含一个名称、成功地址、JumpType 和失败地址。在条件 JumpType 的情况下,失败地址是必需的。

Jump 中的 JumpType 可以是三种之一: UnconditionalJumpConditionalTakenConditionalNotTaken

构建 BlockType 后,您可以使用当前程序计数器使用执行命令对图产生影响。

要导出控制流图,您可以使用提供的迭代器将其导出为您的格式。在未来的版本中,这些格式将提供,但作为可选功能。

非目标

实现和维护五千种不同的输出格式

开关语句?也许...

依赖关系

~310–770KB
~18K SLoC