买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明公布】一种融合静态与动态分析的JavaScript代码回归精简方法_杭州电子科技大学_202410013811.9 

申请/专利权人:杭州电子科技大学

申请日:2024-01-04

公开(公告)日:2024-04-05

公开(公告)号:CN117827663A

主分类号:G06F11/36

分类号:G06F11/36

优先权:

专利状态码:在审-实质审查的生效

法律状态:2024.04.23#实质审查的生效;2024.04.05#公开

摘要:本发明公开了一种基于静态分析与动态分析的JavaScript代码回归精简方法,首先通过静态分析获取函数定义与函数调用的序列,然后利用JavaScript应用的测试套件,执行动态分析,获取静态分析遗漏或不能捕获的函数定义与函数调用序列,整理静态分析与动态分析的函数定义与函数调用,得到全局的函数调用链路信息,最后移除不在调用链路上的函数信息,得到最终的精简应用。该方法对于只基于静态分析或动态分析的方法无法得到完整调用路径问题进行优化,同时对于原有动态加载方案无法有效处理因为测试覆盖不足,或分析准确度不够导致初始应用程序不能有效满足使用问题,采用回归校正的方式,为其他应用提供更有效、更精简的JavaScript应用。

主权项:1.一种融合静态与动态分析的JavaScript代码回归精简方法,其特征在于,包括如下步骤:S1、获取JavaScript应用的程序代码文件与依赖的JavaScript开发库代码文件I,I=c1,c2,...,ci,...,ck,其中ci代表第i个JavaScript代码文件,通过babelparser工具,将ci转化为AST,AST代表抽象语法树,得到AST集合P,P=p1,p2,...,pi,...,pk,其中pi表示ci所转化成的AST,然后以深度优先方式对pi进行遍历,得到调用图G,G=V,E,其中V表示调用图的顶点集,E表示调用图的边集;所述顶点集中的顶点包括以下顶点类型:函数类型、函数调用类型;函数类型的顶点按如下结构表示:<fname,funcid,loc,params,type,path,indexfunc>其中fname表示顶点所属文件名;funcid表示顶点的函数标识;loc表示顶点所在的位置;params表示当前顶点的参数列表;type表示顶点类型,包括函数类型、函数调用类型;path表示顶点的访问路径,若顶点无父级顶点,则path=global,否则path=parent_path∪funcid,其中,parent_path代表父级顶点的访问路径;indexfunc表示当前顶点作为参数传递时,被赋值的索引序号,若没有作为参数传递时,其值为null;函数调用类型的顶点按如下结构表示:<fname,calleeid,loc,args,type,path,indexcall>其中calleeid表示顶点的函数调用标识,args表示当前函数调用类型顶点的参数列表;path表示当前函数调用类型顶点的访问路径,若顶点无父级顶点则path=global,否则path=parent_path∪calleeid;其中parent_path代表父级顶点的访问路径,indexcall表示当前函数调用顶点作为参数使用时被赋值的索引序号,若没有作为参数使用时,其值为null;S2、定义初始顶点G0,G0=<loc,type>,其中loc代表顶点位置,赋值为0,type代表顶点类型,赋值为函数类型,初始节点G0在JavaScript中表示为全局范围;遍历调用图G,获取所有顶点类型为函数类型的顶点SDi,组成集合SD=SD1,SD2,SD3,...,SDi,...,SDn,获取所有的顶点类型为函数调用类型的顶点SCj,组成集合SC=SC1,SC2,SC3,...,SCj,...,SCm,通过funcid和calleeid的对应关系,获取函数-被调用函数的调用对,组成集合SP;S3、执行动态分析:执行测试用例,执行动态分析获取动态调用图,在保证JavaScript程序原有逻辑完整性的基础上,通过NodeProf在程序执行测试用例期间在AST原始节点之前或之后中插入节点,跟踪这些节点在特定位置发生的事件,获取节点之间如何有效地传递动态数据,捕获程序运行期间的特征数据,通过分析这些特征数据,获取程序执行期间函数执行信息集合DP,所述集合DP中的元素为动态分析过程中得到的函数与被调用函数的调用对,DP=<G0,DC1>,<G0,DC2>,<G0,DC3>,…,<G0,DCk>,<DD1,DC1>,<DD1,DC2>,…,<DD1,DCm>,…,<DDi,DCj>,…,<DDn,DCm>,其中G0表示初始顶点,DDi表示动态分析中的函数,DCj表示动态分析中被G0或DDi调用的函数;S4、利用步骤S2得到的集合SP和步骤S3得到的集合DP,得到最终的执行函数集合R;S5、在步骤S4得到执行函数集合后,对代码文件I下所有不在所述执行函数集合R中的函数保留函数声明,并将其函数主体代码替换为动态加载代码,得到精简后的应用程序Is;S6、当精简后的应用程序Is被调用时,若遇到需要执行的函数不在精简后的应用程序Is中,通过动态加载代码获取原函数主体代码,得到最终的应用程序If: 其中Bi为第i次加载的代码内容。

全文数据:

权利要求:

百度查询: 杭州电子科技大学 一种融合静态与动态分析的JavaScript代码回归精简方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。