Page 96 - 《软件学报》2025年第7期
P. 96

贾昂 等: 面向函数内联场景的二进制到源代码函数相似性检测方法                                                 3017


                    总的来说, 当使用最佳的基分类器数量             (AdaBoost 为  50, 其余为  300) 时, ECOCCJ48  在所有方法中获得了最
                 高的  F1  分数. 虽然  RFPCT、RFDTBR  和  EBRJ48  等方法在精确率上更高, 但      ECOCCJ48  在召回率方面表现更优.
                 总体而言, ECOCCJ48    能够实现   78%  的准确率和    70%  的召回率, 最终能够实现       0.74  的  F1  分数, 领先所有其他
                 方法.
                    ECOCCJ48  的卓越性能主要得益于其基于内联规律的分类器链结构设计. 相比于                          RFDTBR、EBRJ48、
                 AdaBoost 等不利用标签依赖关系的方法, ECOCCJ48         通过引入标签依赖关系, 有效地分解了内联规则的学习任务.
                 高优化选项下的内联规则通常是在低优化选项基础上增加了一些新规则, 而                          ECOCCJ48  中从高优化到低优化的
                 标签依赖关系使其在学习高优化选项时能够利用已从低优化选项中学到的规则. 因此, 在高优化选项下, ECOCCJ48
                 只需专注于学习新增的规则即可. 相比之下, RFDTBR、EBRJ48               和  AdaBoost 模型在学习高优化选项时缺乏低优
                 化选项的知识积累, 因此在高优化选项下的内联规则学习中面临较大困难.
                    此外, 尽管   RFPCT  和  ECCJ48  也在不同优化选项间采用了分类器链模型, 但它们并未精确地利用优化选项之
                 间的依赖关系, 因而无法达到与          ECOCCJ48  相同的分类性能. 由于内联规则是从低优化到高优化逐步叠加形成的,
                 采用逆序或无关的顺序构建的分类器链模型无法有效捕捉这一顺序依赖规律.
                    总体来看, ECOCCJ48   能够发现更多隐藏的内联函数调用, 并能迅速捕捉内联模式.

                 5.3   时间开销分析
                    O2NMatcher 在实施过程需要首先训练内联函数调用模型, 然后使用模型进行预测, 最后根据内联标签生成函
                 数集合. 因此, 本节记录了包括模型训练、模型测试和源代码函数集合生成                       3  个不同阶段的运行时间, 进一步评估
                 了  O2NMatcher 的时间开销.
                    图  10(a) 展示了  ECOCCJ48  及其相关  MLC  方法的训练时间. 横轴表示基分类器的数量, 纵轴表示以                s 为单位
                 的训练时间. 在所有      MLC  方法中, AdaBoost 通常只会所选取一层的决策树作为基分类器, 而              ECOCCJ48, ECCJ48,
                 EBRJ48  和  RFDTBRAdaBoost 的基分类器通常为多层的        J48  决策树, 因此  AdaBoost 的模型训练时间最短, 少于
                 100 s. ECOCCJ48  的训练时间与  ECCJ48, EBRJ48  和  RFDTBR  相近, 四者均需约  1 000 s 来训练模型. 而  RFPCT  使
                 用树集合方法进行训练, 其树的深度更深, 因此             RFPCT  的训练时间最长, 超过      10 000 s. 考虑到  ECOCCJ48  模型只
                 需训练一次且能够离线训练, ECOCCJ48         的训练时间成本是可以接受的.

                         10 4                                   10 2


                        训练时间 (s)  10 3                         测试时间 (s)  10 1



                          2
                         10
                                                  RFPCT
                                                  RFDTBR        10 0                      RFPCT
                                                                                          RFDTBR
                                                  ECCJ48                                  ECCJ48
                                                  EBRJ48                                  EBRJ48
                         10 1                     AdaBoost                                AdaBoost
                                                  ECOCCJ48       −1                       ECOCCJ48
                                                                10
                           0    50   100  150  200  250  300       0   50   100  150  200  250  300
                                      基分类器的个数                                基分类器的个数
                                       (a) 训练时间                               (b) 测试时间
                                       图 10 O2NMatcher 和相关工作的训练时间和测试时间

                    图  10(b) 显示了  ECOCCJ48  及其相关  MLC  方法的预测时间. 和训练时间类似, AdaBoost 的测试时间最快,
                 ECOCCJ48  与  ECCJ48, EBRJ48  和  RFDTBR  随后, RFPCT  的测试时间最长. 不同的是, 由于测试过程只需要将样
                 本输入到分类器中, 不需要改变参数, 因此多数模型仅需几秒钟即可预测项目中的所有内联函数调用. 例如, 由                                50
                 个基分类器训练的       AdaBoost 仅需  0.4 s, 由  300  个基分类器训练的  ECOCCJ48  则需要  15.2 s. 需要注意的是, 当仅
                 使用  50  个基分类器时, ECOCCJ48   就能达到相对较高的性能, 此时预测仅需             2.6 s.
   91   92   93   94   95   96   97   98   99   100   101