问题标签 [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 投票
2 回答
6500 浏览

c++ - 用于 C++ 代码的控制流图生成器

我正在寻找用 C++ 编写的源代码的控制流图生成器。你知道任何开源的静态生成器吗?

我想在我的毕业项目中使用它来生成控制流图并突出显示在分析应用程序执行期间已执行的路径。

我已经编写了整个引擎来记录执行的行。

感谢您的所有回答。

0 投票
0 回答
804 浏览

c++ - 了解 lcov 分支覆盖输出中的控制流图

我正在尝试通过检查我当前的代码覆盖率来改进我的单元测试。我正在使用 gcov 和 lcov 生成覆盖结果的 HTML 报告。但是,我在理解某些输出时遇到问题。我知道 a+表示已采用分支,而 a-表示未采用。

变量negative是 bool 类型,method 的返回值也是isZero。所以我希望这里有四个分支,但我看不到输出如何映射到这个期望。那么如何解释输出呢?悬停在 +/- 符号上时的工具提示告诉我,分支 3、6、9、11、12、14、17、20、23 和 26 被采用,而分支 4、7、10、15、18、21、24 和27 从未被采取。

0 投票
1 回答
2622 浏览

compiler-construction - 我可以将 AST 翻译成 SSA,还是需要先翻译成 CFG 然后再翻译成 SSA?

我可以将抽象语法树直接转换为 SSA 表单,还是需要创建一个控制流图,然后从所述 CFG 创建静态单一分配表单?

在控制流图的上下文中:我如何为类似 c 的程序表示这一点?我想我可以为每个函数中的所有基本块存储一个 CFG 图,但是当我调用一个函数时,这可能会使事情复杂化。我能想到的另一种方法是整个程序的 CFG,即所有源文件,但是我将如何存储有关函数的信息?我可以在基本块(即父节点)中存储指向函数的指针吗?

如果我从 CFG 生成 SSA,我是否需要担心有一个代表语句控制流的 CFG?我想我只需要表示基本的块控制流。

0 投票
0 回答
3456 浏览

control-flow-graph - 使用代码绘制控制流图

绘制以下代码的流控制图。

有人可以告诉我如何绘制控制流图,因为我不熟悉。另外,如果您无法帮助,请不要回答愚蠢的答案。这个问题与我即将参加的软件测试考试有关。谢谢你

0 投票
0 回答
120 浏览

loops - LLVM:如何在循环展开后检查字节码中没有循环

我有许多 C 源代码文件,我想在这些文件上执行某种类型的静态分析。首先,我需要摆脱控制流图中的任何循环,为此我使用以下单行代码

我想知道生成的字节码是否target.bc仍然包含一些循环例如因为无法使用给定的参数展开它

一种选择是使用llvm-dis,将结果解析为控制流图,然后检查是否存在任何循环。

但是,我想避免重新发明轮子并使用现有的命令行工具。

问:您能指点我其中一个这样的工具,以及如何使用它吗?

0 投票
0 回答
268 浏览

compiler-construction - 函数的 CFG:被调用函数的 CFG 是否应该包含在外部函数的 CFG 中?

假设我已经获得了一个函数的 CFG(控制流图),并假设一个基本块调用另一个函数(当然,调用是在基本块的最后一条指令中进行的)。

我的问题是:我应该将被调用函数的 CFG 嵌入到外部函数的 CFG 中吗?

要记住的事情:

  • 我为反汇编二进制文件中的所有函数维护一个 CFG。
  • 我正在处理的项目是使用静态分析的恶意软件检测
  • 如果测试二进制样本中的任何一个 CFG 与恶意软件样本中的任何一个 CFG 匹配。

测试样本是恶意的。

0 投票
1 回答
680 浏览

java - Java Web 应用程序中的有向无环图遍历

所以我正在构建一个 Web 应用程序,您可以在其中构建一个有向图,其中一个节点将代表一些操作,而边缘将代表这些操作之间的数据流。所以对于边 {u,v} , u 必须在 v 之前运行。单击此链接以查看示例图

START 节点表示初始值,除输出外的其他节点执行指定的操作。输出节点将输出它接收到的值作为输入。

我应该使用哪种算法方法来处理这样的图?

0 投票
1 回答
739 浏览

java - 如何跟踪方法参数?

我一直在尝试为 Java 编程语言找到“跟踪方法的参数”的确切术语,我通常会找到“污点分析”,但仍然不确定我是否走在正确的道路上。

我想要的是,跟踪方法的参数并查看方法的哪一部分(在范围内)对参数产生影响。例如,如果一个参数被分配给另一个变量,我也想跟踪分配的变量。通过提及“部分”,它可以是控制流图的代码行、语句或分支。

我还检查了工具并遇到了Checker FrameworkFindbugs,但是它们似乎不能完全满足我想要的需求,或者我无法让它们满足我的需求。

请告诉我“污点分析”是否是我正在寻找的正确术语。此外,欢迎任何其他工具建议。

下面有一个来自Checker Framework Live Demo的编辑代码。我期望的是,processRequest()当变量String input被污染时,我期望在方法中的所有行都收到警告或错误executeQuery()。因为一个受污染的变量被传递给它的参数。

0 投票
1 回答
844 浏览

llvm - 可视化损坏 LLVM 函数的 CFG 的最佳方法

我需要可视化.ll文件中的 LLVM 函数的 CFG。有opt工具,它有--view-cfg选项。然而,问题是函数被破坏了,寄存器的定义并没有支配它的所有用途。我需要查看 CFG 来调查为什么会这样。问题:opt没有使用错误的 LLVM 函数,所以我无法用它查看 CFG。

那么,将损坏的 LLVM 函数的 CFG 可视化的最佳方法是什么?

0 投票
1 回答
628 浏览

llvm - llvm 中的简化CFG 传递

我试图在 LLVM 中运行简化 CFG Pass,并在运行我自己的一个 IR 转换后删除一个无法访问的基本块,但我不断收到错误消息 -

删除时:i8* %g

Def 被销毁后使用仍然卡住:store i8 0, i8* %g

我很清楚这意味着什么,但“simplifyCFGPass”的全部目的不是为我们删除无法访问的基本块吗?为什么它必须抛出这个错误?我认为它应该能够简单地管理所有 use-def 依赖项并删除下面无法访问的“继续”基本块中的指令。

以下是相关的 IR -

有人可以解释为什么会出现这个错误吗?API不应该处理这个吗?