项目地址
https://github.com/epicosy/devign
查找相关资料
- 了解AST抽象语法数
- 交叉熵损失函数(Cross Entropy)
- 粗粒度(忘了英文怎么讲了)
- 例如,我有 100 个客户端,每个客户端都有自己的 100 个服务集。所以我必须提供 100100 的总服务。这是非常困难的。而不是我所做的是,我将适用于大多数客户端的所有公共服务标识为一个服务集并单独保留。例如,在 100 个服务中,50 个服务是常见的。所以我只需要管理 10050 + 50。
-
DFG
- DFG 跟踪整个 CFG 中变量的使用。 数据流是面向变量的,任何数据流都涉及对某些变量的访问或修改。 DFG 边表示对相同变量的后续访问或修改。 它由图 2 中的橙色双箭头说明,并在边缘标注了所涉及的变量。 例如,参数 b 用于 if 条件和赋值语句。
-
AST
- AST 是源代码的有序树表示结构。 通常,它是代码解析器用来理解程序基本结构和检查语法错误的第一步表示。 因此,它构成了生成许多其他代码表示的基础,AST V a s t V^{ast} Vast 的节点集包括本文中使用的其余三种代码表示的所有节点。 从根节点开始,代码被分解成代码块、语句、声明、表达式等,最后分解成形成叶节点的主要标记。 主要的 AST 节点如图 2 所示。所有方框都是 AST 节点,第一行有具体代码,并标注了节点类型。 蓝色框是 AST 的叶节点,紫色箭头表示子父 AST 关系。
-
CFG
- CFG 描述了程序在执行过程中可能遍历的所有路径。 路径选择由条件语句决定,例如 if、for 和 switch 语句。 在 CFG 中,节点表示语句和条件,它们通过有向边连接以指示控制的转移。 CFG 边在图 2 中用绿色虚线箭头突出显示。特别是,流程从入口开始并在出口结束,并且在 if 语句处派生出两条不同的路径。
-
NCS
- 为了对源代码的自然顺序进行编码,我们使用 NCS 边来连接 AST 中的相邻代码标记。 这种编码的主要好处是保留了源代码序列所反映的编程逻辑。 NCS 边由图 2 中的红色箭头表示,连接 AST 的所有叶节点。
一切的开始
环境配置
https://github.com/joernio/joern/releases?after=v1.1.173
- gensiom 3.8.1
- 更新后的graph.sc
- python 3.8
- pytorch 1.9.1
- ubuntu 20.04
问题
嵌入阶段(python -e)提示数据是旧文件
训练阶段显示找不到model文件夹
由datamanager.py及其衍生的错误
- torch_sparse报错
https://blog.csdn.net/YPP0229/article/details/106328173/
网址教程不全面,可以上github看看解决方案,网址如下
https://github.com/rusty1s/pytorch_sparse
复现后结果