Page 19 - 《软件学报》2026年第6期
P. 19

2338                                                       软件学报  2026  年第  37  卷第  6  期


                 最大重试次数分别设定为         10  次和  5  次. 实验结果如表  4  所示, 我们计算了第    3.4  节所建立的各项评估指标在实验
                 样本上的平均值.

                                          表 4 BinDec 与基准方法的反编译结果对比 (%)

                       方法             RCf        RCp         RE         IOAcc       BLEU          ES
                       Ghidra        67.10       67.10      67.10       62.98        7.25        17.42
                      PureLLM        60.92       56.70      51.32       37.50        15.27       24.23
                      BinDec         71.93       71.78      71.74       63.18        20.44       31.41
                     BinDec (O0)     70.41       70.09      69.94       60.91        24.56       33.42
                     BinDec (O1)     71.59       71.43      71.43       62.93        19.16       30.51
                     BinDec (O2)     72.69       72.54      72.54       63.28        19.28       30.93
                     BinDec (O3)     72.79       72.67      72.67       65.47        19.00       30.90

                    实验结果表明, 本文提出的         BinDec 方法在反编译正确性方面达到了与传统反编译器                 Ghidra 相当的水平, 同
                 时在代码可读性方面显著优于           Ghidra, 其可读性指标为    Ghidra 的两倍以上. 具体而言, BinDec 在    BLEU  和  ES  两
                 个指标上的表现分别是        Ghidra 的  2.8  倍和  1.8  倍. 这一结果说明, BinDec 所生成的反编译代码与数据集中原始真
                 实代码的相似度更高, 体现出         LLM  在代码生成任务中的优势. 由于          LLM  在海量代码数据上进行过预训练, 它能
                 够生成更符合人类阅读习惯的高级语言代码, 从而规避传统反编译方法因缺乏上下文而难以恢复高可读性代码的
                 缺陷. 此外, 在功能性指标方面, BinDec 在函数可编译率           (RCf)、程序可编译率     (RCp)、可执行率    (RE) 与测试通过
                 率  (IOAcc) 上分别比  Ghidra 高出  7.2%、6.9%、6.9%  和  0.3%. 相比之下, PureLLM  作为一种仅基于   LLM  的基线
                 方法, 在所有代码相关指标上均显著落后于              BinDec 和  Ghidra. 这一对比凸显了  BinDec 方法中引入的符号执行技
                 术对提升反编译代码可靠性的重要作用. 进一步分析可以发现, BinDec 在                   RCf、RCp  与  RE  这  3  个递进指标上呈
                 逐级下降趋势, 而     Ghidra 在这些指标上保持一致. 这       3  个指标分别反映了单个函数的语法正确性、多个函数组合
                 成完整程序的语法正确性以及最终生成程序的实际运行能力. 尽管                      BinDec 在函数可编译率上领先        Ghidra 7.2%,
                 但其测试通过率仅高出        0.3%, 说明  BinDec 目前采用的可靠性保障机制仍存在一定局限性. 我们认为, BinDec 方
                 法的表现主要受以下两方面因素的影响: 1) 外部函数简化模型在重建完整程序时引入了不确定性; 2) 基于符号执
                 行的代码语义一致性检查方法可能存在漏报情形, 从而影响最终生成代码的可靠性.
                    与此同时, 我们展示了采用         BinDec 方法生成的反编译代码在不同编译优化级别              (O0–O3) 下的分组统计结果.
                 分析表明, BinDec 方法在    O0  优化级别下表现出最佳的可读性, 而在           O3  级别下则获得了最优的代码功能完整性
                 指标. 这一结果反映出在反编译代码的可读性与功能正确性之间存在一定的权衡关系, 即较高的功能完整性往往
                 伴随着可读性的下降, 反之亦然. 我们认为, 该现象与不同优化级别下编译器生成的二进制代码特征密切相关. 在
                 较低优化级别     (如  O0) 下, 编译器不会进行深度优化, 代码中保留了较多的中间变量和原始控制流结构, LLM                       能够
                 利用这些信息提升生成代码的可读性. 然而, 由于未进行代码体积优化, 此类二进制代码通常较为冗长, 增加了                               LLM
                 处理过程中的上下文负担, 导致生成的反编译代码可能出现语义准确性不足的问题. 相反, 在较高优化级别                                   (如
                 O3) 下, 编译器会采取一系列激进优化策略, 例如函数内联、循环优化和冗余代码消除等, 使得生成的二进制代码
                 更为紧凑与高效. 此类优化虽然削弱了代码中的可读性结构信息, 但同时降低了                        LLM  理解代码时所需的上下文复
                 杂度, 从而有助于生成功能更完备的反编译结果.
                    进一步地, 为了定量探究函数复杂度对             BinDec 方法性能的影响, 我们参考了        DecLLM [28] , 将二进制代码的长
                 度作为函数复杂度的代理指标, 并计算其与测试通过率的斯皮尔曼相关系数, 结果如表                            5  所示. 结果表明, BinDec
                 方法的性能随着函数复杂度的增加呈现显著的弱负相关, 这与前文的定性分析结论一致, 表明                             LLM  在处理长上下
                 文时幻觉问题会加剧. 这一发现凸显了本文所采用的形式化验证策略的重要性, 该策略作为一种强约束, 能有效过
                 滤模型的不可靠输出, 从而保障生成结果的可靠性. 相比之下, Ghidra 的性能则与函数复杂度无显著相关, 符合其
                 基于规则的方法特性. 这揭示了数据驱动方法与基于规则的方法在不同场景下的互补性. 综上, 对复杂度的分析指
   14   15   16   17   18   19   20   21   22   23   24