问题标签 [control-flow-graph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1222 浏览

linux-kernel - 为 Linux 内核二进制构建完整的控制流图

是否有任何工具可以为整个 Linux 内核二进制文件构建控制流图?例如,考虑为 x86 架构编译的 Linux 内核(vmlinux 文件)。是否可以仅使用静态分析来确定所有执行路径(忽略间接分支或其他需要运行时信息的控制流)?有没有适合这个的工具?

0 投票
1 回答
678 浏览

llvm - LLVM 中基于机器代码的控制流图

LLVM 通常为其中间表示 (IR) 语言提供控制流图 (CFG)。您还可以轻松获得基于源代码的高级 CFG。我想获得机器代码级别的 CFG。有没有办法得到这个?

我做了一点挖掘。在 LLVM 的后端代码生成阶段,有一个称为SSA-based Machine Code Optimizations的阶段。这个阶段的信息不多。但是,我猜 LLVM 在某个中间阶段会生成基于 SSA 的机器代码。如果存在这样的阶段,那么我们可以根据该阶段的代码来制作基本块。使用这些基本块,可以在该阶段创建 CFG。lib\CodeGen任何人都可以提供关于我必须在 LLVM 源代码树(可能在)中查找的任何信息的源文件的任何线索吗?或者class那会给我基于 SSA 的机器代码演练和基本块?我将不胜感激任何指针。

0 投票
1 回答
298 浏览

code-analysis - 我可以使用 JDT 生成控制流图吗?

JDT 是否提供任何 API 来生成控制流图?我使用soot生成控制流图,但是我可以使用JDT生成控制流图吗?

0 投票
1 回答
495 浏览

c# - GNU Radio 编程模式/控制流图

我即将开始开发一个应用程序(可能在 C# 中),它具有与 GNU radio 相似的机制,但目的完全不同。

GNU Radio 有一个类似于典型流程图类型编辑器/绘图工具的 GUI,但“画布”上显示的每个对象都是反应式控制流图(而不是流程图框)的一部分。

基本上,它们是黑匣子,每个都有特定的内部用途,并且每个都在需要时具有输入和输出。

为了解释的简单,假设我的范围是创建一个 GUI 画布,我可以将对象拖到上面和一个运行/停止按钮(运行“程序”)。我想在某些方面有点像编程 Scratch 儿童编程工具中的 GUI。

我最初有 3 个对象。

1)某种类型的键盘输入框,我将在其中输入一些 Base64 编码的文本。这只有一个进入对象编号 2 的输出。

2)这个对象接受输入给它(上面的编码文本)并将其转换回 UTF-8(它的唯一目的)并将其输出到对象号 3。

3) 这个对象接受输入给它的输入(来自对象编号 3)并将其输出到屏幕(在它的小盒子里)。

这些对象做什么并不重要,这只是举例。这基本上是 GNU Radio 的工作方式,除了它传递数字信号数据而不是文本。

我的问题是 GNU radio 使用什么样的编程模式(在我把它拆开之前)或者我应该通过寻找这种类型的应用程序来寻找什么样的 OOP 类型模式或想法。甚至是一些好的谷歌链接。

我已经尝试了几个小时,现在试图在谷歌上搜索一些东西,但是真的很难找到合适的词,这些词不会返回数以万计的用于销售流程图软件的广告等。

我还应该补充一点,以后可以添加新对象(黑框)。

0 投票
3 回答
75 浏览

python - 如何准确地可视化程序主路径的最后一个命令之后发生的情况?

我一直在绘制解释基本编程概念的教育漫画。此刻,我正在做一个关于控制流的,一个领域让我大吃一惊:计算机在完成控制流中程序最终主路径的所有命令之后会做什么。

我以为它会“退出”程序作为结束它的一种方式,但其他消息来源非常被动地说,“程序退出计算机。” 这部分对我来说听起来很奇怪,因为当我可视化控制流时,计算机正在一个接一个地执行命令,直到它遇到某种程序的“结束”。

这是我的工作草稿,用于解释我正在处理的内容:

https://prairieworldcomicsblog.files.wordpress.com/2018/03/controlflowpencil.pdf

在这部漫画的结尾,在这里形象化这个“结局”的最佳比喻是什么?

0 投票
2 回答
1051 浏览

assembly - 在基本块中间跳转

基本块定义为以跳转(直接或间接)指令结尾的(非跳转)指令序列。跳转目标地址应该是另一个基本块的开始。考虑我有以下汇编代码:

bb1

第一个基本块 bb1 有一个目标地址,它是 bb4 的开始。

bb2

第二个基本块 bb2 有一个间接分支,因此目标地址仅在运行时才知道。

bb3

第三个基本块有一个目标地址,它不是另一个基本块的开始,而是在 bb2 的中间。根据基本块的定义,这是不可能的。但是,在实践中,我在多个地方看到了这种行为(在基本块的中间跳跃)。如何解释这种行为?是否可以强制编译器(LLVM)生成除了基本块开头之外不会跳转到其他任何地方的代码?

bb4

我正在使用工具(SPEDI)生成基本块,使用的编译器是 LLVM(CLANG 前端),目标架构是 ARM V7 Cortex-A9。

0 投票
1 回答
1565 浏览

c - 如何在 gcc 的 -fdump-tree 上使用“graph”选项?

.gcov我正在尝试查看 gcc 是否可以提供更多信息,我可以使用这些信息从 C 源代码创建控制流图,然后使用它来检查 Gcov输出中执行的测试用例所采用的路径。到目前为止,我最好的候选人是使用-fdump-tree-cfgwith linenooption ( -fdump-tree-cfg-lineno),但结果文件对我来说仍然是有限的,因为每个函数的节点信息都是分开的。像这样的东西:

这意味着我的解析器需要识别函数内部的每个函数调用main,然后合并它们的节点信息,这对我来说是一项非常艰巨的任务。

所以我从这个文档-graph中找到了这个选项,但我不知道如何使用它。正如文档描述的那样:-fdump-tree

我不知道 GraphViz 是如何工作的,但由于它能够将所有函数的子图呈现为单个图(我假设这意味着所有子图都与主图合并为单个图),这意味着提供的信息-graph更多完成并简化创建控制流图的过程。

由于我无法理解它的含义,因此我尝试按原样使用该选项 ( -fdump-tree-cfg-lineno-graph),但结果仍然与-fdump-tree-cfg-lineno's 结果相同。

我该如何使用它?

0 投票
1 回答
64 浏览

compiler-construction - LLVM 中是否存在 MachineFunction CFG 和 IR Function CFG 的一对一映射?

您可以在 LLVM IRFunction级别和 CodeGenMachineFunction级别拥有 CFG。这是一对一的映射吗?我的意思是,在那些具有相似控制流的 CFG 中是否有相同数量的(Machine)BasicBlocks?我知道指令的数量可能会因为明显的原因而有所不同,但我很想知道结构是否保持不变。

0 投票
1 回答
39 浏览

algorithm - 进/出活变量计算算法说明

这张幻灯片显示了用于计算in[n]out[n]控制流图节点的算法。我很难理解它是如何工作的。我已经看到了一些其他的变化,也很难理解它们。我以前从未处理过定点的东西。

问题是,这个算法在做什么/对它的更直观的解释。我不明白什么in'out'是,以及结束条件是什么意思(until in'...)。不遵循嵌套循环。我对 JavaScript 实现的尝试显示了我缺少的部分:

任何帮助将不胜感激。谢谢你。

0 投票
4 回答
25796 浏览

c - 如何从此代码中绘制控制流图?

如何从此代码中绘制控制流图?如果有人可以展示该过程,我将不胜感激。我可以从一个非常简单的案例中得出 CFG,但我不能做到这一点。我还需要确定基础路径和多个条件标准的测试。这不是家庭作业问题,我只是尝试理解课程材料。谢谢。