pin 相关论文Statically-Directed Dynamic Automated Test Generation 一

本文介绍了一种用于二进制程序检测的新技术,该技术结合了静态分析和动态自动测试生成。通过在三个阶段交替进行动、静态分析,该方法能够有效地识别潜在缺陷,尤其是缓存区溢出等常见问题。在第一阶段,动态分析处理间接跳转并建立可视的下推自动机(VPA);第二阶段利用静态分析在推断自动机中寻找缺陷;第三阶段通过给VPA边缘分配权重来指引测试方向。这种方法在处理类型信息缺失和指令组合的挑战上展现出了高效性,且通过计算VPA上最短路径问题提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两天读了一篇pin的相关论文,如题,不懂,汉化了一下:

备注:注英语的长句子表示不懂

摘要:摘要说他们提供了一种二进制程序检测的新技术:利用静态分析引导动态自动测试生成。运用技术的测试是的过程可以分为三个阶段,动、静态分析交替进行。第一阶段,进行动态分析,用少量的种子测试解决二进制代码中的间接跳转,并建立一个可视的下推自动机(VPA)来反映程序中的全局控制流。更进一步,增加计算的VPA,带有没有被种子测试执行的静态可计算的跳转。第二阶段,将静态分析应用到推断自动机来找到潜在的缺陷,这些缺陷是动态分析的目标。在第三阶段,用前面阶段的结果给VPA边缘分配权重。他们的符号执行基于自动测试生成工具,然后用VPA中加权后的最短路径来将它的探测指向潜在的缺陷
目标。
简介:他们指出每一种测试技术都是在健康度、完整度、速度、精确度、伸缩性和自动化程度之间的折中,但全部都面临这一个基本的问题:状态空间的爆炸。他们面临的第一个问题是在自动测试生成时的集中搜索。他们解决的办法是前瞻性技术:用静态分析来识别可能的缺陷和计算出其他关于被识别的缺陷的有用信息,例如数据流片,以期能找到导致缺陷的状态。这些他们认为的缺陷是动态分析的目标,而那些数据流片则被用来引导搜索指向那些目标。他们面临的第二个问题是动、静态分析的结合,目标是用静态分析指导动态测试生成并用动态分析滤掉在静态分析中呈阳性的假缺陷。他们把这种结合成为以静态为指导的动态自动测试生成。

贡献:第一阶段在没有参考符号和调试信息的情况下建立了一个程序间控制流图像的近似。将动静态分析结合来处理间接跳转和对组合指令进行解码,两个问题都是一个挑战,因为在缺失类型信息和符号的情况下,每一个集合指令都是一个可能的跳转目标。在不同的复杂计算指令下,很难将代码从数据中却别开来。他们的方法通过用一些种子测试处理一些间接跳转和增加用静态计算出的直接跳转间的关系计算出了一种转换关系的近似计算。第一阶段计算出的VPA是静态分析的输入,用来找到潜在的可发现的缺陷,例如缓存区溢出。他们的静态分析将抽象内存地址和数据流分析结合起来,这样在处理覆盖(非)一致的读写的时候就更精确,他们发现这在分析执行大量字符串操作的程序中特别有用。

      第三个阶段用单一路径的参考符号执行来寻找具体的引发缺陷的输入。独自运行的时候,测试生成工具可以省省许多程序输入,每个输入运用不同的路径,但经常没有一个输入导致缺陷。

      为此,他们提出了引导动态搜索找到指向静态分析识别的缺陷的正确路径的启发式算法。他们的算法对于是否在强连通分量(strongly connected component SCC)例如一个loop有不同的工作机理。在SCC之外,他们开发了一种有两部分构成的启发式算法,根据两种静态计算的矩阵进行状态分级,一种基于最短VPA路径,另一种是使用缺陷的数据流片。在SCC中,他们开发了一种根据几何分布选取通过SCC的路径模式,然后通过多次反复来交替检测那些路径。
据他们所知,之前没有人提出过计算在VPA上最短路径的问题。我们用一个高效的算法解决了这个问题:先解决相配的路径,在一个调用图中自底向上,然后通过用一个自动机生成一个禁止不相配调用的自动机来延伸到整个VPA路径。这种算法大大地提高了效率。


控制流计算:他们的动态分析将多个跟踪装到一个代表全局控制流的VPA中。另外,他们增加VPA,这些VPA丢掉的转换可以通过静态分析精确计算。在这一部分,将描述通过将动态分析和静态分析相结合进行VPA的计算。
他们用pin的回调函数对二进制程序的jump和library load进行检测。多个种子测试的跟踪路径合并成一个VPA。被检测程序在VPA形式下控制流的一个下近似可以按下面的方法计算:每一个被访问的基本块都用VPA中的一个状态表示。每一个被访问的边界被分到调用、内部和返回之中的一类并且VPA会被更新以便源和目标块通过一个合适类型的边界联系起来。在动态的VPA建立之后,他们用递归遍历拆卸来增加VPA中没有被种子测试执行的条件直接跳跃。得到的VPA即是被分析程序的控制流图的一个近似。建立的VPA的完整性依赖于种子测试执行间接跳转语句的能力和用递归遍历分解精确就散分支数目的能力。最后他们用BitBlaze的Vine库将指令译为一个简单的内部表示(a simplified internal representation)以帮助后面的分析。
3静态分析: 静态分析计算栈结构和分配的堆区域的近似大小,这些大小值用来检测越界操作。静态分析维持了一个已写入的抽象区域和在汇编代码的声明的抽象图,(Third,static analysis maintains a map between written abstract locations and 
statements in the assembly code),这个图将用来计算向后的数据流片(backward data-flow slice),以期能找到缺陷所在。这些数据流片是作为他们在第三阶段引导启发算法德尔一个部分使用。
3.1抽象域他们用来静态分析的抽象域有几个分层次的子域组成:strided intervals(SInterval),value map(ValMap),regions(Region),和
abstract states(State)。内存区:抽象的分离的内存块。每个域有唯一的识别符。识别符集称为RegionID,集中的元素用带有索引号的r表示。他们将寄存器看成固定大小的区域(RegID)。全局变量也够成一个固定大小的区域(GlbId)。了简洁起见,给常量和标量(scalar)分配一个特殊的区域(CId)。他们为分配给堆的地址创建了一个特殊的区域,而对其他类型的区域(寄
存器,栈和全局变量)则是一个函数创建一个特殊区域。
       在一个区域中的值可能是一个整数或是一个地址。为了表示一个能够指向多个区域的指针或者一个或为常量或为指针的值,他们用值图(value map ValMap),ValMap定义为从RegionID到SInterval的一个映射,SInterval就表示RegionID区域中的偏移量(offset),

整数表示为CId中的偏移量,另外,他们要用字母a,可能加上索引来表示SInterval中的一个地址(代表ValMap中的一个距离)。(RegionID,SInterval)对也称为abstract location,或简称aloc。alocs用来表示堆、栈或寄存器类似变量的入口(variable-like entries)。..........


相关知识偏移量offset),计算机的虚拟内存是分页的,每页有相应的页号,页的大小称为偏移量

                    基本块basic block),只有一个入口和一个出口的一段代码称为基本块

                    间接跳转indirect jump),也称为间接分支语句(indirect branch)、计算跳转(computed jump)、寄存器间接

                   (register indirect jump)跳转,是下一条指令执行地址不确定的控制指令,例如下一指令的地址存在寄存器中,                                        这样的跳转称为间接跳转


先到这吧,3.1抽象域实在搞不懂,待续.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值