问题标签 [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.
java - 带有 soot 的 Android APK 控制流图
我正在尝试使用 Android APK 中的 soot API 制作控制流图。我读了很多,但我对如何从头开始感到有点无助。我正在使用烟灰的夜间版本(在此处下载: https ://ssebuild.cased.de/nightly/soot/lib/ ),因为我读到版本 2.5.0 已过时。我在谷歌上发现了很多,例如:
https://mailman.cs.mcgill.ca/pipermail/soot-list/2014-September/007303.html
首先,我需要加载 Android APK 文件。在链接上它完成了:
但这已经是第一个问题,夜间构建的 soot.jar 中没有SetupApplication。
我是用命令行完成的,就像这里:
http://www.abartel.net/dexpler/
这几乎奏效了,但构建控制流图只是第一步。之后,我必须操纵图表并将其用作其他框架的输入。所以命令行对我来说是没有选择的。我宁愿用Java来做!
有人可以帮助一个煤烟新手吗?
c++ - 多线程的基本块和控制流图
我是多线程和 C++11 线程的新手,我正在尝试了解线程在架构级别的行为。现在,不同的线程有可能拥有自己独立的控制流。如何在同一运行中获取不同线程的基本块信息和控制流图?可以通过 g++ 完成还是需要其他一些工具?
gcc - PGO 如何应用于源代码?它如何影响CFG?
最近一直在寻找PGO的相关话题,开始想知道它们是如何应用到源代码中的,并且已经应用了一个又一个的应用效果。
我的意思是,如果您在 GCC 或 CLang 中启用 PGO 优化,例如,它将应用所有优化(内联、虚拟调用推测、死代码分离等),对吧!?
即使它们都没有应用于源代码,让我们假设其中一些是。那么,我猜它们是按顺序应用的,对吧?
那么,他们能否将 CFG(控制流图)修改为一些基本块频率丢失的程度?
例如,如果在名为“A”的 PGO 之后应用了名为“B”的 PGO,并且“A”修改了源代码,导致丢失了一些 Basic Blocks 频率,那么“B”如何应用(假设两者都是 PGO这取决于BB频率)?
(对不起,我的英语不好)
java - 将控制流图展平为字节码指令列表
我正在使用此处找到的 ObjectWeb ASM 库来解析 jar 文件并读取方法的字节码。我已经编写了代码来从字节码指令列表生成控制流图。
但是,在对控制流图执行一些操作后,我希望能够将控制流图“导出”回(简单)指令列表。理论上,我应该能够遍历所有基本块并打印出存储在每个块中的指令。但是,这样做很可能会导致指令的顺序非常奇怪,因为基本块列表没有排序。
我读过形成“支配树”可以帮助找出基本块的最佳(最合乎逻辑的)排序。我不确定如何计算支配树以及如何使用它对基本块进行排序。
有没有人可以分享关于这个主题的任何知识?
谢谢。
stream - 数据流处理
我有一类计算似乎很自然地采用了图形结构。该图远非线性,因为有多个输入以及扇出的节点和需要其他几个节点结果的节点。在所有这些计算中,也可能有几个接收器。但是,不存在任何周期。输入节点被更新(不一定一次一个),我让它们的值流过(此时纯粹是概念性的)图。随着输入的变化,节点保持状态,并且计算必须相对于输入按顺序运行。
由于我必须非常频繁地编写此类计算并且我不愿意每次都编写临时代码,因此我尝试编写一个小型库,以便通过为各种顶点编写类来轻松地将此类计算拼凑在一起。然而,我的代码相当不优雅,并且没有利用这些计算的并行结构。虽然每个顶点通常都是轻量级的,但计算可能会变得非常复杂和“宽泛”。为了使问题更加复杂,这些计算的输入在循环中非常频繁地更新。幸运的是,这些问题的规模足够小,我可以在单个节点上处理它们。
有没有人处理过类似的事情?你会推荐什么想法/方法/工具?
parsing - 从程序集文件创建控制流图
我想使用 C 语言从汇编文件创建控制流图(CFG)。我一直在考虑它,这些是我的想法: 1. 创建块 - 逐行处理汇编文件 - 找到重要的指令,如函数名称、块名称、跳转指令、调用指令或离开/返回,也许还有其他一些 - 找到它们也许用正则表达式?但我还没有在 Windows 上找到 C 的正则表达式实现。- 匹配上述指令后,将匹配前的指令保存到某个结构,这是我的块 2. 创建 CFG - somhow 从块创建 CFG 但我不知道
谁能给我一些建议怎么做?此外,如果有更好的语言可以做到这一点,如果你告诉我,我会很高兴。
感谢您的时间和帮助。
testing - 线路覆盖、分支覆盖和独立路径覆盖的区别?
线路覆盖、分支覆盖和独立路径覆盖有什么区别?
给定以下场景,路径会是什么样子?
以下链接上的控制流程图图片 --> http://testerstories.com/files/Path.Test.011.png
非常感谢为每个人找到真正路径的步骤。
谢谢 :)
for-loop - 如何为嵌套的for循环绘制控制流图?
如何为上述代码段绘制控制流程图?
提前致谢 :)
language-agnostic - 什么是带案例标签的语句和案例标签?
阅读 McCabe 关于圈复杂度的文章后,它写道:
一个不太常见但对复杂性影响更大的问题是“带有案例标签的语句”和“案例标签”之间的区别。当多个案例标签应用于同一程序语句时,这将被建模为控制流图中的单个决策结果边,从而增加了复杂性。
我不明白 - 什么是“案例标签声明”和“案例标签”?
他们的意思是如果case 1
,,case 2
例如,都跳转到case 3
?