token embedding model
- 操作码和操作数都是词
- 一个词的上下文是它的“上一行汇编”和“下一行汇编”。(比如操作码的上下文不包含它自己的操作数)
- 通过随机游走生成完整的“句子”,算法可以结合句子中的上下文生成词的向量。
- 词对应的向量使用word2vec算法生成(选用的是CBOW) https://zhuanlan.zhihu.com/p/95204186
- TF-IDF模型得出操作码重要程度,两个程序结合起来算
- 一行汇编对应的向量的计算:操作码向量x重要度++操作数的向量的平均数(因为数量不确定)
- 所以一个块的向量就是:

CFG generation
- 将两个ICFG合并成一张图,中间连边,将有相同字符串引用或库函数调用的基本块连在一起(每个字符串引用或库函数调用作为中间结点)。
- 图的embedding是用TADW计算的,这个算法会结合基本块的向量,得到每个基本块带图信息的embedding。
- 对每个中间结点开始,找出它们上面所有可能的配对里相似度最高的,直接配上,并放入curr集合。然后每次从curr集合中取出一个配对,获得每边的距离小于k的基本块。然后将这些块里相似度最高的两个作为新配对,并放回curr集合。除非周围的基本块都已经完成了配对,这时curr集合中的配对个数就减少了。
- 如果有未匹配的块,用匈牙利算法匹配。