ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

论文学习:ApproxiFuzzer: Fuzzing towards Deep Code Snippets in Java Programs(IEEE‘21)

2021-11-05 10:33:46  阅读:201  来源: 互联网

标签:语句 片段 towards Java 21 代码 路径 距离 TM


计算机、软件和应用程序会议(COMPSAC)

INTRODUCTION

        深度代码片段是需要复杂的触发条件或隐藏在不太频繁调用的函数中的代码段,确定这些代码的可达性仍然是一项重大的挑战,符号执行和模糊测试都有局限性。所以本文提出一种近似模糊技术,给定目标代码片段,模糊器收集执行路径(w.r.t.),测试输入,计算路径和目标之间的执行距离,将可达性问题转为优化问题,然后变异种子以探索输入空间,并将模糊过程引导到生成到达目标代码片段的测试输入。

PROBLEM FORMULATION

        定义执行距离为输入到达或接近深代码片段的有效性,P为被测程序。tcs为P中目标代码片段,可以是程序语句或程序语句中的块。

        定义执行路径tr(t)为执行到的代码片段的序列,则路径和目标之间的距离DIS被定义为:

行距离:定义目标代码片段从lb到le,而路径tr(t)包含[s0, s1, ……, sn],那么在x行的si到tcs的行距离为:

         所以行距离被定义为在路径上的任意语句si和tr(t)的最短距离。

CG(调用图)距离:TM为包含tcs的方法,则CG距离为调用链上的任意方法到TM的距离:

         其中shortest(...)计算在CG(P)上Mi到TM的最短路径,使用迪杰斯特拉或弗洛伊德算法。

CFG(控制流图)距离:建立一个TM的控制流图,Bi为基本块,block(t, TM):{B0, B1,...,Bn}为被一次运行t覆盖的基本块,TB为包含tcs的基本块,CFG距离为:

        CFG距离计算从block(t,TM) 到TB的最短距离。

APPROACH

流程:1.变异输入 2.执行和收集执行路径 3.选择性接受变异输入。

1. 种子池中元素按照执行距离排序,距离短的种子应该被更频繁地选中,概率公式为:

2. 记录执行路径和测试输入,基本策略是计算行距离。另一种策略是计算CG和CFG距离。

3. 微调策略:计算条件距离以加快变异过程。

        条件语句可以表示为:if(lv op rv) cs1 else cs2.假设cs1在测试中被覆盖了,但cs2离目标更近,微调策略会检查if语句中的值并验证一个变异是否让它更接近cs2.

         一次执行路径中会有两个或多个条件语句,所以我们需要计算归一化的条件距离:

 4. 实现:使用Jacoco进行代码插桩,使用soot构建调用图和控制流图,将字节码转换成Jimple代码从而高效收集条件下的可变值,通过AFL来随机变异输入文件。

标签:语句,片段,towards,Java,21,代码,路径,距离,TM
来源: https://blog.csdn.net/egvnoen/article/details/121123784

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有