基于抽象解释的可执行代码值范围分析
2023-07-12
来源:步旅网
第36卷 第22期 计算机工程 2010年l1月 VoL36 No.22 Computer Engineering November 2010 ・软件技术与数据库・ 文章编号:1000--3428(20i0)22---0面1. — ———— 基于抽象解释的可执行代码值范围分析 窦增杰,王震宇,姚伟平,陈楠,余弦 (解放军信息工程大学信息工程学院,郑州450002) 摘要:阐述可执行代码抽象存储空间模型的概念并给出程序运行时刻环境抽象表示技术。通过抽象解释静态逼近程序不动点语义的理论 保证二进制代码数据流分析的正确性以及可计算性。基于抽象解释和单调数据流框架提出一种自动分析可执行代码变量取值范围的方法及 自动获取程序循环最大迭代次数和不可执行路径,并给出数据流分析实例。 关键词:抽象解释;值范围分析;数据流分析;运行时刻环境 Value Range Analysis 0f Executable Code Based 0n Abstract Interpretati0n DOU Zeng-jie,WANG Zhen-yu,YAO Wei-ping,CHEN Nan,YU Xian (Institute of Information Engineering,PLA information Engineering University,Zhengzhou 450002,China) |Abstract]The abstract memory model and the abstract run—time environment of executable code are described.The data lfow analysis is given and the correctness and computability of data flow analysis are ensured based on abstract interpretation theory,Abstract interpretation is used to propagate the variable value range information through the generic monotone dataflow framework.New methods tO automatically compute the maximal counts of iterations of the loops and tO identify the infeasible paths are presented.The example of analyzing program’S data lfow is given. [Key wordsI abstract interpretation;value range analysis;data lfow analysis;rnn—time environment 1概述 据域∽D—Data),抽象堆域 D~Heap)和抽象栈域 D~Stack)。 获取程序变量取值范围对程序的安全验证、属性检测、 每个抽象域均能表示程序运行时的属性,变量在具体存储空 漏洞发现都至关重要,要精确地获取变量的所有可能取值, 间的属性抽象表示成抽象区域中的属性。如图1所示,针对 需要找出从程序入口到变量执行点处所有可能的执行路径。 一个可执行文件,其抽象存储空问模型包含了一个抽象代码 但是寻找所有可能的执行路径是一个不可判定问题 j,抽象 域,表示程序中的执行代码所在的区域;一个抽象数据域, 解释理论为计算机科学中的不可判定问题和复杂问题的逼近 表示程序所有初始化和未初始化的全局变量所在的区域;根 求解提供了系统性的构造方法和有效算法 J。程序的抽象解 据情况有若干个抽象堆域和抽象栈域。抽象栈域表示过程活 释使用另一个抽象对象域上的计算抽象逼近程序具体对象域 动记录所在的区域,抽象堆域表示动态分配产生的内存区域。 上的计算,使得程序抽象执行能够反映出程序真实运行的部 抽象存储空间模型就是抽象解释程序分析方法中抽象对象域 分信息 J。本文在可执行文件反汇编基础上,剖析汇编代码 的实例,基于抽象存储空问模型的运算反映了程序具体环境 的结构与特点,给出建立程序抽象存储空间模型和通过指令 上的运算。 迁移函数来获取运行时刻环境的方法,阐述了基于单调数据 流框架和抽象解释理论实现变量取值范围分析技术。 2基于抽象存储模型的代码运行时刻环境表示 2.1可执行代码存储空间抽象表示 每一个正在执行的程序可看作是在它的逻辑地址空间上 运行,程序逻辑地址空间由以下区域组成: (1)代码区:存放可执行的目标代码。 (2)静态数据区:存放所有初始化和未初始化的全局变量 和编译器产生的其他数据。 f3)堆区:存放程序运行时分配和释放的数据。 图1 程序抽象存储空间模型的基本构成 (4)栈区:存放过程的活动记录。 基金项目:国家“863计划”基金资助项目(2007AA01Z483);河南 在程序的实际逻辑空间中,程序的目标代码、活动记录、 省高新领域重点攻关基金资助项目(082102210011) 堆区以及全局数据区在一个地址空间中。为了分析方便,把 作者筒介:窦增杰(1983一),男,硕上研究生,主研方向:信息安全, 逻辑空问抽象划分为互不相关的存储区域并分别对其建立抽 可信计算;王震宇,副教授;姚伟平、陈楠、余弦,硕士研 象存储模型。从而,程序存储空间不再是简单的一维地址空 究生 间,其包含了4类抽象域:抽象代码域(AD—Code),抽象数 收稿日期:2010—06—24 E—mail:douzengjiel23@gamil.com 一69一 2.2程序运行时刻环境的抽象表示 在程序抽象存储空间定义变量集合 vnr垒registeru gvarUf_varU h_var —如下: “ f, Ⅲentry 1u fDu I m∈pred(n)} 其他 0 = ( ) 其中,register表示寄存器变量集合;g_var表示全局变量集 合;f vat表示局部变量集合; 一var表示堆变量集合。 为了很好地处理不同字节内存读写操作,需要给出相应 的数值表示来精确地表示变量的取值。本文用带跨度的区间 域 表示变量的取值, 既能表示数值的范围又能表示数值 的变化幅度。 其中,,是程序开始结点的初始值,通常是T或者上;pred(n) 表示节点 的前驱; 表示与节点n对应的流函数;U为节点 的汇合函数。 4基于单调数据流框架变量值范围分析 4.1程序执行流的构造 可执行代码值范围分析需要确定基于程序执行流进行抽 定义1定义 垒{x+ixmliEZ}, 表示X mod m的同 余类。 定义2对于k位的Sl:s(1,“)表示下列整数集合: Xs[1,“])={ ∈[一2k,2 ]ll<i<u, ∈ ) 基于Var和 ,程序运行时刻环境抽象表示为: D兰 r_÷V ,vs ̄-(siGx(S1p) x(S/H)”) 其中, 表示抽象静态数据域中全局数据的数值集合(也表 示数值域); 表示函数栈空问的数值集合; 表示函数堆 区间的数值集合; =( ) x(Slp) X…x(S/p) 表示n个栈区域 的数值集合;VS是一个完备格,对于VS。、VS 其上的偏序关 系r-:VSlE VS2,当且仅当v 1是VS2的子集。定义如下操作: (1)VSlF]l ̄s2:vsl和vs2的交集。 (2)vs1Uvs2:VS1和VS2的并集。 (3)vs1=VS1Vvs2:加宽操作。 为了保证基于抽象存储模型的数据流分析迭代终止,本 文选择程序循环的汇合节点为加宽节点。 (4)0:表示各个抽象存储区域和整数C相加的结果。对 于vs=(2,2[0,3]+4)和c=6,贝0(v 0c)=(8,2[0,3】+l o)。 (5) (vs,S): (v , )返回一个二元组(F,P)。其中,F表示“完 全访问”的变量集合,其中变量的大小为S,起始地址在VS 中;P表示“部分访问”的变量集合,P中所包含的变量有 2种:起始地址在I)S中,大小不等于S;变量的地址在VS中, 但它的起始地址和大小并不满足F中的条件。 (6)RemoveLowerBounds(vs):边界最小化,把 的下界 设定为一oO。 (7)RemoveUperBounds(vs):边界最大化,把 ,的上界设 定为0(3。 3数据流方程的建立 数据流分析通过静态分析程序的结构及静态收集程序中 各个变量的引用情况建立数据流方程,对数据流方程进行求 解以得到程序的属性信息。程序的变量、表达式的性质或者 变量的取值等程序属性可抽象表示为格中的元素。格到格自 身的映射函数 L一£称为流函数。流函数通过格到格自身的 映射来模拟程序的运行。程序流图G(N,F)中Ⅳ表示程序指令 对应的结点,F为程序的执行流。 对于一个程序流图G(N, 和格L,以前向数据流分析为 例,对于每个节点n,有: (1) :节点n之前程序点的属性集合,即n的入口处的 数据流信息。 (2)OUTn:节点n之后程序点的属性集合,即n的出口处 的数据流信息。 (3 :节点n的流函数, 根据 计算OUrn。 对所有的nEN和格L, ∈L,0UT,∈L,数据流方程 一7f卜一 象解释的迭代序列。为表示程序的迭代序列,需要对可执行 代码反汇编结果进行处理,使每条汇编语言带有标号。程序 的标号集合定义为Lab。定义函数init:l--*Lab返回指令集合, 的初始标号;函数final:I--- ̄ ,J口6)返回指令结束标号的集合; 函数flow:I--+ ̄J(LabxLab)映射指令的执行流集合,。 4.2指令迁移函数 数据流方程的流函数在此实例化为指令迁移函数。指令 迁移函数描述一条指令执行前后程序抽象运行时刻环境的变 化情况,指令迁移函数输入一个抽象运行时刻环境并返回一 个新的抽象运行时刻环境。表1列出了汇编指令类型;R1、 R2是寄存器;C、C1、C2为整型常量。 表1汇编指令类型 表2列出了各类型汇编指令对应的迁移函数 。其中, rl与 , 与r,4的抽象迁移函数相似,在此仅列出 与 的抽象迁移函数。指令执行前后的程序抽象运行时刻环境分 别记为 。 表2指令迁移函数 类型 抽象运行时刻环境 2Hv ,∈6 :=dR,¨( ,0C)】 RlH ∈ 2HV ∈ A := R LH(wRl@vsR )l 2HV ∈ ( ,P)= (v @Cj, ) Ad ifIPI=0then vs =u{VS Iv∈F,vHv } :=olRlH(v 0C2)】 else :: RlHT】 R1 _v .∈ 2Hv ∈o,( ,P): (vs .@C E, ) tarp=if-( l ∈(PUF)}ufpHTlPEP} A ifIFI:I,IP[:0【hen :: f pu(v (vsR ̄ ̄C2)『v∈ }] else := f U{vH(v @C2)Uvs IvEF,V ̄,VS ∈盯}】 4.3基于单调数据流框架程序值范围分析算法 一个单调数据流框架等价于一个完备格: L=(L,E,U,n,T,上) 单调数据流框架的实例由以下构成[41: (1)框架的完备格L; (2)指令迁移函数集合厂; (3)通过函数flow返回的流集合F (4)程序的极值标号集合E, ={init(1)1; (5)极值2∈,J,极值表示程序入13点的初始值; (6)标号 对应的指令迁移函数 。 使用单调数据流框架来求解变量取值范围就是求下面等 式的最小不动点。 R。( )=u{R(1 )I(, ,,)∈,}u纽 R.(f) (R。(f)) ‘一一J/1上-ielf se f∈E 上式中的R表示程序的抽象运行时刻环境,R。(f)和R.(z) 分别表示标号为f指令执行前后的运行时刻环境。基于单调 数据流框架 的求解算法如下所示: 算法变量值范围分析迭代算法 输入(L1 F,E,z 输出R。(f);R.(f) Initialisation 0 W:=NULL for all(1,1 )∈F do W:=cons((1,1 ),W) endfor for all(1∈FII∈E) if 1∈E then R。(1):=z;else R。(1):=J- endfor Iteration() while W ̄NULLdo l:=first(head(W)) l :=second(head(w)),W:=tail(W) if fl(R。(1))≠R。(1 )then R。(1 ):=R。(1 )Ufl(R。(1)) for all l"with(1 ,1”)∈F do W:=cons((1 ,1”),w) endfor endwhile 其中,w由F中的元素组成;函数cons用于向w中插入元 素(f,l );函数head用于取w的第1个元素;函数first用于 取(,,f )中的第1个成分;函数second用于取(,,f )中的第2个 成分。 5约束条件优化及分析实例 定义3通用单调数据流框架下分析实例(L F,E,z√),一 条程序执行路径为标号序列 = 一, 】,n>0,lblnElab, 【fi’fI+l】EF,i=1,2,…,n一1,定义路径的迁移函数为: R):{ 伸・)p =0E0… ・: , 一 -: (R) 命题1对于分析实例(L F,E,z ,路径p=[W2,…,f 】为 程序一条路径。当迭代完成后,R对应于1 的程序抽象运行 时刻环境, i ( )。如果存在变量PareVar,使得 (v口一≠ , 但Rp(var)=O,则P为不可执行路径。 命题2对于分析实例(L, F,E,z ,var为循环变量集合, 则循环的迭代次数为: loopcount=minj({ 一1 J+1),jcFar 其中,变量 为 形式:s[1,M]。 为了说明上述数据流求解过程,下面给出一段源码: int z=1: main() ( 1nt x,Y; for(x:O;x<2O;x=x+2) { if(x<25) y=x+z: else y=z; } ) 对生成的可执行程序反汇编得到的精简汇编代码如下: proc main edx:=[405030] ecx:=ecx—ecX if(ecx<19h) then eax:=edx+ecx else eax:=edx ecx:=ecx+2 if(ecx<14h) then JMP 3 else retn main函数的抽象存储模型涉及2类抽象域,一个是main 函数的抽象栈域,另一个是抽象全局数据域。其抽象存储空 间模型如图2所示,全局变量0x405030在抽象全局数据域中 用Mem一1来表示,其偏移为Global+1。 EAX ECx EDX 图2实倒的抽象存储空向模型 对汇编代码分析得代码的流集合: F={(1,2),(2,3),(3,4),(3,5),(4,6),(5,6),(6,7),(7,8),(7,9),(8,3)l 根据表2的迁移函数,变量值范围分析数据流方程求解 公式为: R。(1):e =¨(上,上); c _(L上), H(上,上), Ll (1,上) R.(1)=_厂I(R。(1)):R。(1)I (如 一十(1,___)j R。(2)=尺.(1) R.(2)=_7 (R。(2))=尺。(2)[ecx ̄--+(O,上)]R。(3)=R。(3)VR.(2)MR.(8) R.(8)i ( 。(8))= (8) 迭代完成后得到的变量取值范围为: R.(1):eax=H(上,上),ec H(上,j_),edx卜_÷(1,上) R.(2):eax=H(2,上),e H(0,上),P H(1,上) . (3):eax=H(上,_L),ecxH(2[O,9],_L) R.(4): =H(2【0,9]+l,__),ecx ̄--*(2[O,91,j-) R.(5):8似=卜_+(1,上),ec H( ,上) R.(6):eax= ̄--f2[O,9】十l,上),gc (2【O,10】,上) 根据以上获得的取值信息,标号3处其中循环变量为 ecx,由此可知循环迭代次数为loopcount=min 。(1“一1 l+1)= L9—0J+1=10。 对于路径 J=f1,2,3,5】,月 li (RpI)i (月I)))):eax= H(1,上),ecx ̄-+(SJ,上);对于路径p2=[1,2,3,4】,Rp2:fp(Rp2)= (下转第74页) 一71— d的意义同表l。 表2 DKMEANS算法的重要步骤所需的通信时问 重要步骤 通信时间 k( k( k( . . 本文用(1个处理机所用时间)÷(多个处理机所用时间)计算加 速比,结果见表5。 表5加速比 。 P ) 。+pdTdm) pd t ) +口 . 表3 PKMEANS算法酌重要步骤所需的运算时问 重要步骤 运算时问 从表5可以看到,实际的加速比和式(5)的理论值非常接近。 另外,计算通信比也是一个常用的衡量指标,计算通信 PKMEANS的通信时间 omlll=(3k+1)Ts【art p+2(1+ ,t ̄=TslTp,结果见表6。通过实测的计算结果,计算通信比也 较高。 表6通信比 由于 、 在特定的环境中为常数,因此通信的 时间复杂度约为O(pkd)。 ~ 却+(PKMEANS计算时间 。 p=(( + +1) +1 ) 。p, 理论值 I.5xlO 3.Ox10 竺塑苎 4 5 ̄10 6.0xl0 7.5x10 . 9.0xl0 由于 。。在特定的环境中为常数,且n远大于k、d,因此计 算的时间复杂度约为O(kdn/p),它比通信时间复杂度更高阶, 说明该问题值得并行。 26.916 7 42.3l2 5 36.148 l 55.958 3 48.264 7 43 413 0 20 000 0 1 8.705 9 19.240 0 22 103 4 22 885 7 20 425 5 13 875 0 19.363 6 15 850 0 15.142 9 39.571 4 21.333 3 1I 428 6 17.777 8 I2.473 7 15142 9 14 32I 4 I6 400 0 9 142 9 8.000 0 13.642 9 16.000 0 12.269 2 14.692 3 PKMEANS所需时间 : 。 。+ 。 ,每次迭代的时问 复杂度约为O(kdn/p)。同样,对于式(2),算法SKMEANS每 次迭代的时间复杂度约为O(kdn)。 加速比系数= 16结束语 本文对串行k均值聚类算法的并行进行了研究,给出了 (5) kdn=p Knn|D 文献【6】认为,对于P个处理机而言,可能获得的最大加 速比通常为P,从式(5)可见,算法PKMEANS具有很高的 性能。 2个定理,从而保证了在减少计算节点间通信代价的情况下, 能从局部聚类信息生成完备的全局聚类信息。在此基础上, 实现了基于MPI的并行k均值算法。通过实验和性能分析证 明了理论分析的正确性。 5实验 本次实验所用的数据参照http://archive.ics.uci.edu/ml/上 的Iris数据集的特点,随机生成样本数分别为1.5x10。、 3.0xl0。、45xlO。、60 ̄10。、75x10。、9OxlO。的6个数据集。 .参考文献 [1]Dhillon I S,Modha D S.A Data—clustering Algorithm on Distributed Memory Multiprocessors[EB/OL].(1999—10・20).http://www.CS rpi. edu/ ̄zaki/WKDD99/dhillOil.ps.gz. ...实验所用硬件环境为:2.0 GHz CPU,128 MB内存,软件环 境为Ubuntu8.10和MPICH1.2.7。实验分别在1台、2台、 [2]倪巍伟,陈耿,孙志挥.一种基于数据垂直划分的分布式密度 聚类算法[J】.计算机研究与发展,2007,44(9):1612:1617. [31 Joshi M N.Parallel K—means Algorithm on Distributed Memory Multiprocessors[EB/OL].(2003-10-10).httl:l://www.cs.umn.edu/~ 4台、6台、8台、1O台微机上进行,结果如表4所示,表中 的数据为每次迭代所用的计算时间和通信时间。 一4 粤 —・・ -:_—_:_・ 一:_—_:. [41 m谷n淑ios化hi/吕维先,PKMeanspdf.● .基于消息传递的并行聚类算 法….现代计算机,2006,(1):227—230. [5】Han Jiawei,Kamber M.Data Mining:Concepts and Techniques[M].San Francisco,USA:Morgan Kaufmann Publishers,2000. f6】Wilkinson B,Allen M.并行程序设计[M】.陆鑫达, 译.北京:高等教育出版社,2006. 402-403.6 : 妻 苎 萼竺 墨 示 【3】 …G. Y。 。s。。 N。 wh砒Y。 E ∞ 【D] .吝 出 堑 : 车些荸 圭 婺塑 2 方 妻 量 警围。 : 。。㈣n US A:Theu iversityofwisco sin. 2007 ̄ ‘ 翌 [4] 洛.妄时系统最差情况执行时间分析 研究[D].长沙:国 而提高可执行程序分析效率鬯 法, 一 莘技某l吴; ………‘ …~一’。 为程序的安全验证、属性检测、 … ‘’。 编辑顾逸斐 . 抽墨 竺塞 苎 堑 理 。鱼缸… …一…2 …… .幽 篓 ; ,’ 嚣 一 ” 一 … 象解释理论的程序验证 , .. ,