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

c++ - 通过 LLVM 在 ac/c++ 程序中查找所有可能的路径

我试图通过 LLVM 在我的程序中找到任何可能的路径。现在我可以在我的代码中找到所有函数从入口到出口 BB 的路径。然而,这不是我需要的。我需要扩展 CFG(也许通过内联函数调用?!)为整个源代码创建一个 CFG,并在这个扩展的 CFG 中找到路径。我正在考虑首先使用 -inline pass 来内联所有函数,然后运行我的路径查找器 pass,但正如我所观察到的 -inline 仅适用于在代码(cpp 文件)中明确提到内联的函数。我无法遍历数百个函数并将内联添加到所有函数中。我还需要保证所有呼叫都是内联的,并且没有错过任何呼叫。我不确定内联是我唯一的选择,甚至这是一个选择。对此的任何想法表示赞赏。

**显然我的源代码中没有递归调用。

0 投票
0 回答
891 浏览

c - 调用 __stack_chk_fail 后的意外行为

在 x86 中,GCC 想要调用时会生成以下指令__stack_chk_fail

类似的行为发生在 ARM 中:

在静态分析工具中,当人们想要构建一个 CFG 时,CFG 算法无法确定__stack_chk_fails调用的基本块的最后一条指令。

在调用后有某种返回__stack_chk_fail指令是合理的,以防止 CPU 执行它不应该执行的指令(或潜在的数据条目)。

在这些情况下,CFG 生成器算法假定它是一个常规函数调用,并继续遍历另一个函数的代码(在前一个示例中)或数据条目(在后一个示例中),这是完全不需要的。

所以,我的问题是为什么 GCC 不在基本块的终点插入return(或branch )指令?

0 投票
1 回答
317 浏览

python - 查找函数输出的输入依赖关系

我一直在使用 pycparser 开发一个 python 程序,该程序应该生成一个 JSON 文件,其中包含给定函数及其输出的依赖关系。对于示例函数:

在这里,我希望b依赖于testInput。但是,当然,结构和 if 语句等可能会变得更加复杂。我正在测试的文件还具有特定形式的函数,这些函数被视为输入和输出,如下所示:

这里c将依赖于VariableInDatabaseb和以前一样。我在 pycparser 中进行了这种分析,因为大多数结构和指针对我来说真的很难处理,而且似乎有更好的方法。我已经阅读了 AST 和 CFG,以及其他分析工具,如 Frama-C,但如果这是一件事,我似乎无法找到明确的答案。

有没有一种已知的方法来进行这种分析,如果有,我应该研究什么?它应该包含数千个文件,并且能够将这些依赖项输出到 JSON 中,因此编辑器插件似乎不是我想要的。

0 投票
3 回答
482 浏览

ocaml - OCaml 或 Reason 的调用图生成器

我想分析 OCaml/Reason 代码存储库并了解各种函数之间的调用。有没有提供这种功能的工具?

0 投票
1 回答
1158 浏览

algorithm - 在有向图中找到所有可能路径中的公共路径

我试图找到循环有向图中每条可能的路径总是访问的公共节点。我的想法是计算所有可能的路径,然后搜索公共元素。然而,a)这似乎不是很有效,b)它不考虑循环。

目标:是实现不经意的散列边界作为防篡改方法。为此,我需要确定一组在控制流图中与输入无关的通用基本块。换句话说,我想找到将为任何给定输入执行的程序(基本块集)的确定性块。

0 投票
1 回答
1881 浏览

python - 如何检索python代码的控制流图?

我想转储给定 python 代码的控制流图,类似于 gcc 编译器选项给出的选项: -fdump-tree-cfg 用于 c 代码。

我成功地获得了 python 代码的 AST(抽象语法树),但是从 AST 阶段获取控制流图非常复杂和麻烦。

有没有更简单的方法可以直接检索 python 代码的控制流图?有什么建议么?

哦,顺便说一句,我正在使用 python3.5

谢谢你们!

PS我真的不知道我在后台使用什么样的解释器,据我所知它是CPython(不确定),我不认为它是PyPy(Rpython)。任何建议我如何验证它?

0 投票
0 回答
315 浏览

python-3.x - 遍历 Python 代码的 AST,需要一些帮助

我一直在试图弄清楚为 Python 代码检索控制流图的正确方法是什么,我正在寻找与 ac 程序上的 gcc 输出类似的输出(我使用了 gcc -fdump-tree -cfg)。

我将给出一个简短的示例来阐明我的意图,例如给出以下简单的 c 源代码

c语言中的fib函数

我得到了如下所示的控制流图:

从 gcc 生成的 cfg

cfg 输出包含原始的c 关键字和goto指令,而不是循环(for、while 等),这对我的目的非常有用。

所以在过去的几天里,我正在研究为python 代码实现一个 cfg 生成器,深入研究 AST 模块(阅读:Green Tree Snakes,但它看起来 AST 非常详细地解析了每个关键字,但我想避免它。我更感兴趣的是关注从原始 python 脚本中提取的原始关键字的流程。

有没有人有任何建议,如何实现?

谢谢你们!

0 投票
2 回答
4798 浏览

c - 如何使用 Clang 从源代码中提取控制流图?

在过去的 5 年里,我一直在使用 Gnu Compiler Collection (gcc/g++),所以我是 clang 的新手,我想为 C/Objective C/C++ 源代码生成一个控制流图。谢天谢地,我在这里这里阅读并发现我可以使用 CFG 类函数获得源级语句的基本块表示:CFG::buildCFG() CFG::dump()

这很棒:),但我仍然不清楚如何在将函数体传递给 buildCFG 之前以 AST 形式和 ASTContext 获取函数体?

有人可以在这里给出一个简短的片段,演示如何使用clang导出给定源代码的CFG吗?

谢谢你们

0 投票
0 回答
129 浏览

c - 使用 clang 的 python 绑定获取实时变量

我正在用 Python 为 C 语言编写一个分析工具,为此我正在使用 clang python 绑定。到目前为止,一切都很好,我能够获得我拥有的 C 文件的 AST 并处理它们。现在我需要在程序的某个点找到实时变量。实时变量是指在重新分配开始之前该行代码之后使用的变量。我注意到 clang 中已经有一些相关的代码liveVariables.h

有谁知道我怎样才能让它在 python 绑定中工作?如何liveVariables通过 AST 和 调用函数TranslationUnit

0 投票
0 回答
279 浏览

c# - 如何为这个类绘制控制流图和圈复杂度?

如何计算该程序的圈复杂度?所以我需要画cfg。