CN111008152A - 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 - Google Patents
一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 Download PDFInfo
- Publication number
- CN111008152A CN111008152A CN201911365787.0A CN201911365787A CN111008152A CN 111008152 A CN111008152 A CN 111008152A CN 201911365787 A CN201911365787 A CN 201911365787A CN 111008152 A CN111008152 A CN 111008152A
- Authority
- CN
- China
- Prior art keywords
- function
- kernel module
- kernel
- module
- change
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质,本发明根据内核以及内核模块之间的函数调用关系构建内核模块依赖有向图;当某一内核模块版本升级后,比较内核升级前后版本间的函数差异,确定发生变化的内核模块接口函数集合;沿内核模块依赖有向图将内核接口函数变化辐射到有向图中与之相关的内核模块集合,从而确定内核模块兼容影响域,并根据兼容性问题解决的难易程度发出兼容性预警。本发明能够针对内核模块的不同版本之间的确定影响域和影响域实现版本兼容性检测,可用于保证内核模块之间的自洽以及兼容性预警,具有计算和存储代价小、检测准确度高的优点。
Description
技术领域
本发明涉及操作系统内核以及内核模块升级时的版本兼容性保证技术领域,具体涉及一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质。
背景技术
目前 Linux、FreeBSD 等主流开源操作系统采用大内核结构,设备驱动、文件系统等扩展功能采用内核模块的方式实现,与进程管理、内存管理等核心功能协同完成管理硬件设备以及向应用提供服务的功能。内核模块之间以及与核心功能之间通过函数调用来实现数据流和计算的传递。
内核由一系列功能函数和数据构成,功能函数是实现功能逻辑的程序代码。为了降低单个函数实现复杂性,往往会将一个大的功能拆分成多个函数实现,主函数调用这些函数,完成复杂功能。一个功能往往会拆分成多个函数,并且封装在多个内核模块中。其中封装了进程管理、内存管理、进程间通信等核心功能函数的内核模块比较特殊,它需要最先被加载,称为 核心模块,例如在 Linux 中是vmlinuz,在FreeBSD中是kernel。
由于修补缺陷或者是功能升级的原因,内核模块的实现会随着时间而发生变化,这些变化包括函数增减、函数参数和返回值等语法改变以及一些函数语义改变。当内核模块中的函数发生改变后,调用该函数的其他内核模块函数将会受到影响,出现无法执行或者执行异常的情况,上述的情况就是内核模块兼容性问题。
目前同一版本之间的内核模块通过编译时的符号匹配检查实现内核模块在同一编译版本内的自洽,保证同一版本下的内核模块具有同一版本号,并且具有与核心模块相匹配的校验信息。在运行系统中,通过模块版本号或模块校验信息来来判定模块是否与当前运行系统兼容。当出现版本间内核模块混用的时候,通过简单的拒绝加载版本不符合的内核模块来保证运行系统中内核功能的自洽,以此来提高内核运行时的可靠性。但是这种方式仅仅通过版本信息就决定内核模块的可用性,未能进一步给出内核模块中函数不匹配的信息,无法给兼容性的解决提供参考信息,降低了内核模块的可用性。
在实际的作业系统中,由于内核既要应对应用的请求,又要管理设备的状态,包含的内核功能模块多且杂。由于应用新增需求或新增硬件设备导致的内核功能模块的升级替换必不可少,此时如果可以给出某一版本内核模块升级之后影响到的所有模块,可以评估出升级的工作量,无疑可以为系统升级提供好的决策支持。目前通过编译时的逐步检查,一次只能检测一个模块编译时与系统提供符号的符合性,无法一次性展现受影响内核模块的全局性视图。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质,本发明能够针对内核模块的不同版本之间的确定影响域和影响域实现版本兼容性检测,可用于保证内核模块之间的自洽以及兼容性预警,具有计算和存储代价小、检测准确度高的优点。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于函数依赖图的内核模块兼容影响域分析方法,实施步骤包括:
1)获取目标内核模块的原始版本v1、更新版本v2以及原始版本v1的内核模块集KMS1;
2)分别根据原始版本v1的内核模块集KMS1构建内核模块依赖图Gdep和以及函数关系内核模块依赖图Gfunc;所述内核模块依赖图Gdep以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的关系作为节点之间的有向边;所述函数关系内核模块依赖图Gfunc以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的内核功能函数名作为节点之间的有向边;比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合;
3)根据内核模块依赖图Gdep的影响传递规则结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域;根据内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域;
4),分别记为当前内核模块M.ko的相向模块集合和背离内核模块集合。
可选地,步骤2)中构建内核模块依赖图Gdep的步骤包括:
A0)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS;
A1)从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
A2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在任意内核功能函数调用关系的内核模块;
A3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,并将节点及其有向边添加到内核模块依赖图Gdep,跳转执行步骤A1)。
可选地,步骤A2)的详细步骤包括:
A2.1)获取当前内核模块M.ko的符号表S;
A2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空;
A2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕,则跳转执行步骤A2.7);
A2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤A2.5);如果是CallFun函数,则跳转执行步骤A6);否则跳转执行步骤A2.3);
A2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,所述相向内核模块具体是指当前函数F在该内核模块的CallFun表中;跳转执行步骤A2.3);
A2.6)获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,所述背离内核模块具体是指当前函数F在该内核模块的InFun表中;跳转执行步骤A2.3);
A2.7)将相向模块集合MNFS和背离模块集合MNBS取并集作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,跳转执行步骤A3)。
可选地,步骤2)中构建函数关系内核模块依赖图Gfunc的步骤如下:
B0)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS;
B1)从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
B2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在任意内核功能函数调用关系的内核模块;
B3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,且该有向边的名称为对应的内核功能函数,并将节点及其有向边添加到函数关系内核模块依赖图Gfunc,跳转执行步骤B1)。
可选地,步骤B2)的详细步骤包括:
B2.1)获取当前内核模块M.ko的符号表S;
B2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空;
B2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕,则跳转执行步骤B2.7);
B2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤B2.5);如果是CallFun函数,则跳转执行步骤B2.6);否则跳转执行步骤B2.3);
B2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,所述相向内核模块具体是指当前函数F在该内核模块的CallFun表中;跳转执行步骤B2.3);
B2.6)获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,所述背离内核模块具体是指当前函数F在该内核模块的InFun表中;跳转执行步骤B2.3);
B2.7)将相向模块集合MNFS和背离模块集合MNBS取并集作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,分别记为当前内核模块M.ko的相向模块集合和背离内核模块集合;跳转执行步骤B3)。
可选地,步骤2)中比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合具体是指分别获取目标内核模块在原始版本v1和更新版本v2中的符号表和调试信息,分别比较符号表中的InFun函数变化和CallFun函数变化得到目标内核模块的函数变化集合。
可选地,步骤3)中根据内核模块依赖图Gdep的影响传递规则结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域的详细步骤包括:
获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械能分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合MNFS,输出该相向节点集合MNFS为第一确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第一影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合,输出该相向节点集合为第一确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第一影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的背离节点集合MNBS,输出该背离节点集合为第一确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为第一影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
可选地,步骤3)中根据内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域的详细步骤包括:
获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械能分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为第二确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第二影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为第二确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第二影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的背离节点集合MNBS,输出该背离节点集合MNBS为第二确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为第二影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
此外,本发明还提供一种基于函数依赖图的内核模块兼容影响域分析系统,包括计算机设备,该计算机设备被编程或配置以执行所述基于函数依赖图的内核模块兼容影响域分析方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行所述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。
和现有技术相比,本发明具有下述优点:本发明根据内核以及内核模块之间的函数调用关系构建内核模块依赖有向图;当某一内核模块版本升级后,比较内核升级前后版本间的函数差异,确定发生变化的内核模块接口函数集合;沿内核模块依赖有向图将内核接口函数变化辐射到有向图中与之相关的内核模块集合,从而确定内核模块兼容影响域,本发明能够针对内核模块的不同版本之间的确定影响域和影响域实现版本兼容性检测,可用于保证内核模块之间的自洽以及兼容性预警,具有计算和存储代价小、检测准确度高的优点。
附图说明
图1为本发明实施例方法的基本原理示意图。
图2为本发明实施例方法构建内核模块依赖图Gdep的流程图。
图3为本发明实施例方法步骤A2)的流程图。
图4为本发明实施例方法步骤A2)中构建相向模块集合的流程图。
图5为本发明实施例方法步骤A2)中构建背离模块集合的流程图。
图6为本发明实施例方法构建函数关系内核模块依赖图Gfunc的流程图。
图7为本发明实施例方法步骤B2)的流程图。
图8为本发明实施例中获取函数变化集合的流程图。
图9为本发明实施例中基于Gdep的InFun函数变化影响传递。
图10为本发明实施例中基于Gdep的CallFun函数变化影响传递。
图11为本发明实施例中基于Gfunc的InFun函数变化影响传递。
图12为本发明实施例中基于Gfunc的CallFun函数变化影响传递。
具体实施方式
如图1所示,本实施例基于函数依赖图的内核模块兼容影响域分析方法的实施步骤包括:
1)获取目标内核模块(内核模块名为T.KO)的原始版本v1、更新版本v2以及原始版本v1的内核模块集KMS1;
2)分别根据原始版本v1的内核模块集KMS1构建内核模块依赖图Gdep和以及函数关系内核模块依赖图Gfunc;内核模块依赖图Gdep以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的关系作为节点之间的有向边;函数关系内核模块依赖图Gfunc以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的内核功能函数名作为节点之间的有向边;比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合;
3)根据内核模块依赖图Gdep的影响传递规则结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域;根据内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域;
4)将第一确定影响域、第二确定影响域、第一影响域、第二影响域输出。
从实现角度看,内核由函数和数据组成,函数包含了实现功能的程序代码。为了降低单个函数实现复杂性,往往会将一个大的功能拆分成多个函数实现,主体函数调用这些函数,完成复杂功能。 一个功能往往会拆分成多个函数,并且封装在多个内核模块中。因此跨模块之间的函数调用非常普遍。按照功能的不同,内核模块中的函数包括两类,一种是内核功能函数InFun,它是实现体均在内核模块中函数,它可能被其他内核模块调用;一种是内核调用函数CallFun,它是实现体在其他内核模块中,而被本模块中的函数调用的函数。
本实施例中把内核模块作为节点,如果内核模块A调用了内核模块B中的任意内核功能函数,则在A和之间B连接一条有向边,其中A为边的起始节点,B为边的终止节点,这表明内核模块A因函数调用而依赖于内核模块B。对同一内核版本中的所有模块均执行上述操作,将得到一个内核模块依赖图Gdep。其中,A和B之间调用关系的确定,可以通过扫描内核模块A和B的二进制文件中的符号表取得,出现在模块A符号表中的CallFun函数如果出现在模块B的InFun函数表(InFun表)中,意味着A调用了B。
如图2所示,步骤2)中构建内核模块依赖图Gdep的步骤包括:
A1)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS,从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
A2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在任意内核功能函数调用关系的内核模块;
A3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,并将节点及其有向边添加到内核模块依赖图Gdep,跳转执行步骤A1);
本实施例中,步骤A2)是通过构造子函数Cons_KO_Graph(KMS,M.ko)实现的, 子函数Cons_KO_Graph的调用参数KMS为原始版本v1的内核模块集KMS1。
如图3所示,步骤A2)的详细步骤包括:
A2.1)获取当前内核模块M.ko的符号表S;
A2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空(NULL);
A2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕(S==NULL),则跳转执行步骤A2.7);
A2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤A2.5);如果是CallFun函数,则跳转执行步骤A6);否则跳转执行步骤A2.3);
A2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,跳转执行步骤A2.3);
A2.6)获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,相向内核模块具体是指当前函数F在该内核模块的CallFun表中;跳转执行步骤A2.3);
A2.7)将相向模块集合MNFS和背离模块集合MNBS取并集(即:MNFS∪MNBS)作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,背离内核模块具体是指当前函数F在该内核模块的InFun表中;跳转执行步骤A3);
本实施例中构建了子函数FIND_IFNFS(OKMS,IF)来获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块,且带调用参数的形式为FIND_IFNFS(KMF,F),因此步骤A2.5)可表示为MNFS=MNFS∪FIND_IFNFS(KMF,F)。
如图4所示,子函数FIND_IFNFS(OKMS,IF)初始化私有变量IFNFS为空,然后通过对输入的OKMS(值为原始版本v1的内核模块集KMS1)进行遍历,每一次遍历取出一个模块OM.ko,如果模块OM.ko在CallFun表中则将其加入私有变量IFNFS,最后将私有变量IFNFS作为子函数FIND_IFNFS(OKMS,IF)的结果返回。
本实施例中构建了子函数FIND_CFNBS(OKMS,CF)来获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块,且带调用参数的形式为FIND_ CFNBS (KMF,F),因此步骤A2.6)可表示为MNBS=MNBS∪FIND_CFNBS (KMF,F)。
如图5所示,子函数FIND_CFNBS(OKMS,CF)初始化私有变量CFNBS为空,然后通过对输入的OKMS(值为原始版本v1的内核模块集KMS1)进行遍历,每一次遍历取出一个模块OM.ko,如果模块OM.ko在InFun表中则将其加入私有变量CFNBS,最后将私有变量CFNBS作为子函数FIND_ CFNBS (OKMS,IF)的结果返回。
本实施例中把内核模块作为图中的节点,如果内核模块A调用了内核模块B中的内核功能函数InFun-a,则在A和之间B连接一条有向边并以LineInFun-a命名,其中A为边LineInFun-a的起始节点,B为边LineInFun-a的终止节点,这表明内核模块A因函数LineInFun-a依赖于内核模块B。对某一内核版本中的所有内核模块均执行上述操作,将得到一个更为详细的函数关系内核模块依赖图Gfunc。如图6所示,步骤2)中构建函数关系内核模块依赖图Gfunc的步骤如下:
B1)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS,从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
B2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在任意内核功能函数调用关系的内核模块;
B3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,且该有向边的名称为对应的内核功能函数,并将节点及其有向边添加到函数关系内核模块依赖图Gfunc,跳转执行步骤B1)。
本实施例中,步骤B2)是通过构造子函数Cons_Func_Graph(KMS1,M.ko)实现的。如图7所示,步骤B2)的详细步骤包括:
B2.1)获取当前内核模块M.ko的符号表S;
B2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空;
B2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕,则跳转执行步骤B2.7);
B2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤B2.5);如果是CallFun函数,则跳转执行步骤B2.6);否则跳转执行步骤B2.3);
B2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,跳转执行步骤B2.3);
B2.6)获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,相向内核模块具体是指当前函数F在该内核模块的CallFun表中;跳转执行步骤B2.3);
B2.7)将相向模块集合MNFS和背离模块集合MNBS取并集作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,分别记为当前内核模块M.ko的相向模块集合和背离内核模块集合;跳转执行步骤B3);
本实施例中步骤B2.5)和步骤A2.5)均为调用子函数FIND_IFNFS(OKMS,IF)来获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块,且带调用参数的形式为FIND_IFNFS(KMF,F),因此步骤B2.5)可表示为MNFS=MNFS∪F.NFS,其中F.NFS即为调用子函数FIND_IFNFS(OKMS,IF)的执行结果。
本实施例中步骤B2.6)和步骤A2.6)均为调用子函数FIND_CFNBS(OKMS,CF)来获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块,且带调用参数的形式为FIND_ CFNBS (KMF,F),因此步骤B2.6)可表示为MNFS=MNFS∪F.NBS,其中F. NBS即为调用子函数FIND_ CFNBS (OKMS,IF)的执行结果。
如图8所示,步骤2)中比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合具体是指分别获取目标内核模块在原始版本v1和更新版本v2中的符号表和调试信息,分别比较符号表中的InFun函数变化和CallFun函数变化得到目标内核模块的函数变化集合。
在一个内核模块的版本更迭中,InFun和CallFun两类函数均可能会发生变化,变化可分为函数语法和函数语义两类改变。其中函数语法的改变包括函数增减、函数中输入参数、输出参数的类型、数量、取值范围的变化,这些从语法形式上就可以识别的变化,函数语义的变化则是指函数在实现过程中可能产生副作用的那一类变化。内核模块编译后的二进制代码中包含了函数的信息。其中符号表中包含内核模块中所有函数名称。调试信息表中有具体的函数参数和返回值信息。函数的实现体中会包含函数的语义信息。对于一个内核模块,版本间函数增加和函数减少可通过扫描内核模块的符号表,比较两个版本间的差异获得。函数的输入参数、输出参数的类型、数量、取值范围等变化类型,需要内核模块在编译时加入额外的调试信息,才可以在内核模块的二进制文件中得到,因此可见性要弱于函数的增减。如表1所示,函数语义的改变,涉及到函数的内部实现,仅从二进制文件的符号表等结构信息上无法获得,简单的扫描符号表不可见,需要比较函数实现体的差异来获取,一种方法是基于源代码更新patch来查看实现体的差异,或者是研究基于二进制代码的差异检测算法。
表1:函数变化类型、二进制形式上可见性之间的关系。
函数变化类型 | 二进制形式上可见性 | |
1 | InFun/CallFun函数减少 | 易见 |
2 | InFun/CallFun函数增加 | 易见 |
3 | InFun/CallFun函数语法改变 | 可见 |
4 | InFun/CallFun函数语义改变 | 不可见 |
由上述的分析可知,版本差异性检测可以分易见、可见、不可见三个层次来实现。针对同一内核模块版本之间的这些类型变化,扫描内核模块编译后的二进制文件,通过对二进制文件中的符号表、调试信息表的扫描和解析,可以获得内核模块函数变化信息。
由上面的分析可知,在一个内核模块的版本更迭中,InFun和CallFun两类函数都会发生增减、函数语法和函数语义的改变。它们的变化对于其他模块的影响则有所不同。内核模块中InFun函数的改变,会影响到调用它的其他内核模块,而CallFun函数的改变则会影响到其调用的其他内核模块。
当InFun函数减少时,意味着原先使用到它的内核模块将无法完成预定功能,这会直接破坏该模块的兼容性,因而需要将影响传递出去;而当InFun函数增加时,意味着原先未使用到它的内核模块可能可以使用更好的方式来实现原有功能,该函数也可能是为新增其他内核模块服务的,而不会对原始的内核模块产生影响,对兼容性的破坏不明显,无须传递;当InFun函数输入参数和输出参数发生变化,意味着原先使用到它的内核模块无法通过原有方式使用该函数,但是可以通过调整输入和输出参数,来完成预定功能,这会直接破坏兼容性,因而需要将影响传递出去;当InFun函数语义发生变化时,意味着原先使用到它的内核模块将无法使用原有的方式完成预定功能,并且无法通过形式上的调整完成既定工作,而且由于不容易察觉因而兼容性影响不直接但存在隐患,且由于技术实现的原因本专利中选择不传递。
当CallFun函数增加时,意味着原有的内核模块集无法提供该函数预定功能,这会直接破坏该模块的兼容性,因而需要将影响传递出去;而当CallFun函数减少时,意味着该模块不再使用到原有的CallFun函数,这不会对其他的模块产生影响,对兼容性的破坏不明显,无须传递;当CallFun函数输入参数和输出参数发生变化时,意味着原先依赖的内核模块无法以适合的形式提供该GallFun函数,直接破坏兼容性,因而需要将影响传递出去;当CallFun函数语义发生变化时,意味着无法使用原有的方式完成预定功能,并且无法通过形式上的调整完成既定工作,而且由于不容易察觉因而兼容性影响不直接但存在隐患,由于技术实现的原因本专利中选择不传递。
表2给出了函数变化类型对兼容性的影响以及是否需要传递的关系。
序号 | 函数变化类型 | 对兼容性的影响 | 传递性 |
1 | InFun函数减少 | 直接 | 传递 |
2 | InFun函数增加 | 不直接 | 不传递 |
3 | InFun函数语法改变 | 直接 | 传递 |
4 | InFun函数语义改变 | 不直接 | 不传递 |
5 | CallFun函数减少 | 不直接 | 不传递 |
6 | CallFun函数增加 | 直接 | 传递 |
7 | CallFun函数语法改变 | 直接 | 传递 |
8 | CallFun函数语义改变 | 不直接 | 不传递 |
根据模块依赖图的定义以及上面的分析可知,当内核模块A出现第1、3类改变时,需要根据模块依赖图的拓扑将影响沿以A为终点的边向外辐射传递出去,而当发生6、7类改变时,需要根据模块依赖图的拓扑将影响沿以A为起点的边向外辐射传递出去。一直持续到图中的叶节点或是图的中心节点,其中图的中心节点是指核心模块所在的节点。
本实施例步骤3)中根据内核模块依赖图Gdep的影响传递规则结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域的详细步骤包括:
如图9所示,获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械能分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合MNFS,输出该相向节点集合MNFS为确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合,输出该相向节点集合为确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
如图10所示,获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的背离节点集合MNBS,输出该背离节点集合为确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
为了更加清晰的描述影响的传递过程,本实施例中首先给出下面的定义。定义1;在内核模块依赖图Gdep中,如果节点A为边L的终点,节点B为L的起点,称节点A为节点B的背离节点,称节点B为节点A的相向节点。定义2;在函数关系内核模块依赖图Gfunc中,如果节点A为边L的终点,节点B为L的起点,称节点A为节点 B的基于边L的背离节点,称节点B为节点A的基于L的相向节点。定义3:在内核模块依赖图Gdep中,如果存在从节点A出发到节点B的单跳路径,称节点A在节点B的确定影响域中。如果存在从节点A出发到节点B的一条路径,称A在节点B的影响域中。定义4:在函数关系内核模块依赖图Gfunc中,如果存在从节点A出发到节点B的单跳路径,称B在节点A的确定影响域中。如果存在从节点A出发到节点B的一条路径,称B在节点A的影响域中。
在内核模块依赖图Gdep中,内核模块1,3类变化影响的传递采用以下的步骤:
Step1,当节点A出现1,3类改变时,取得A的相向节点集合{Bi};{Bi}为确定会受到影响的节点集合,即节点A的InFun确定影响域。如果{Bi}不为空,对集合{Bi}中的每个节点给出第一级预警信息。
Step2,如果{Bi}不为空且存在未标记节点,取出一个未标记节点Bi,标记该节点,取得Bi的所有相向节点并加入到{Bi} ;否则结束。
Step3,{Bi}为受到影响的节点集合,即节点A的InFun影响域,给出预警信息。
在内核模块依赖图Gdep中,内核模块6,7类变化影响的传递采用以下的步骤:
Step1,当节点A出现6,7类改变时,取得A的背离节点集合{Bi};{Bi}为确定受到影响的节点集合,即节点A的CallFun确定影响域。如果{Bi}不为空,对集合{Bi}中的每个节点给出兼容预警信息。如果{Bi}为空,如果发生的是6类改变(增加了CallFun函数),给出兼容预警信息,否则报错。
Step2,如果{Bi}不为空且存在未标记节点,取出一个未标记节点Bi,标记该节点,取得Bi的所有相向节点并加入到{Bi},跳转到Step2继续 。
Step3,{Bi}为受到影响的节点集合,即节点A的CallFun影响域,给出预警信息。
节点A的CallFun确定影响域和InFun确定影响域的合集就是A的确定影响域;节点A的CallFun影响域和InFun影响域的合集就是A的影响域。
本实施例步骤3)中根据函数关系内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域的详细步骤包括:
如图11所示,获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械能分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
如图12所示,获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的背离节点集合MNBS,输出该背离节点集合MNBS为确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
在函数关系内核模块依赖图Gfunc中,内核模块1,3类变化影响的传递采用以下的步骤:
Step1,当节点A出现1,3类改变时,取得发生改变的InFun函数集合相应的边集合{InFuni}Trans,取得节点A 基于边集合{InFuni} Trans的相向节点集合{Bi};{Bi}为确定受到影响的节点集合,即节点A关于变化边{InFuni} Tran的确定影响域。如果{Bi}不为空,给出兼容预警信息。
Step2,如果{Bi}不为空且存在未标记节点,取出一个未标记节点Bi,标记该节点,取得Bi所有相向节点并加入到{Bi},跳转到Step2继续 ;否则结束;
Step3,{Bi}集合为受到影响的节点,也就是节点A的InFun影响域。
在函数关系内核模块依赖图Gfunc中,内核模块6,7类变化影响的传递采用以下的步骤:
Step1,当节点A出现6,7类改变时,取得发生改变的CallFun函数集合{CallFuni},取得A基于边集合{CallFuni}的背离节点集合{Bi};{Bi}为确定受到影响的节点集合,即节点A的确定影响域。对确定影响域集合{Bi}中的每个节点给出第一级预警信息。如果{Bi}为空,且发生了第6类改变(增加了CallFun函数),报出发生第六类改变的预警信息,否则报错误。
Step2,如果{Bi}不为空且存在未标记节点,取出一个未标记节点Bi,标记该节点,取得Bi的所有相向节点并加入到{Bi} ,跳转到Step2继续;
Step3,{Bi}为可能受到影响的节点集合,也就是节点A的CallFun影响域。
节点A的CallFun确定影响域和InFun确定影响域的合集就是A的确定影响域;节点A的CallFun影响域和InFun影响域的合集就是A的影响域。
综上所述,本实施例基于函数依赖图的内核模块兼容影响域分析方法具有下述技术要点:本实施例根据原始版本v1的内核模块集KMS1构建了两种内核模块依赖图模型,一种是内核模块依赖图Gdep,一种是以及函数关系内核模块依赖图Gfunc。本实施例分析了内核模块函数变化的具体情况,确定了内核模块函数变化的三个层次,并给出了相应的检测方法。本实施例提出基于内核模块依赖图Gdep的影响传递方法:包括基于内核模块依赖图的InFun函数变化影响传递方法和基于内核模块依赖图的CallFun函数变化影响传递方法。本实施例提出基于函数关系内核模块依赖图Gfunc的影响传递方法:包括基于函数关系内核模块依赖图的InFun函数变化影响传递方法和基于函数关系内核模块依赖图CallFun函数变化影响传递方法。本实施例基于提出基于内核模块依赖图Gdep的影响域分析方法:基于内核模块依赖图Gdep,根据前述内核模块变化分析方法检测出变化的类型,并基于前述传递方法,从宏观上快速定位内核模块变化的影响域。本实施例依托函数关系内核模块依赖图GFunc,根据前述内核模块变化分析方法检测出变化的类型,并基于前述传递方法,在付出部分计算和存储代价的情况下,界定内核模块变化的确定影响域和影响域。 本实施例前述基于函数依赖图的内核模块兼容影响域分析方法可用于对任意内核模块版本升级后的兼容性检查,通过比较内核模块版本间升级前后的函数差异,确定发生变化的内外接口函数集合,通过预先建立的模块依赖有向图辐射确定因这些函数变化,受到影响的所有内核模块,并发出兼容性预警。
此外,本实施例还提供一种基于函数依赖图的内核模块兼容影响域分析系统,包括计算机设备,该计算机设备被编程或配置以执行本实施例前述基于函数依赖图的内核模块兼容影响域分析方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行本实施例前述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行本实施例前述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于函数依赖图的内核模块兼容影响域分析方法,其特征在于实施步骤包括:
1)获取目标内核模块的原始版本v1、更新版本v2以及原始版本v1的内核模块集KMS1;
2)分别根据原始版本v1的内核模块集KMS1构建内核模块依赖图Gdep和以及函数关系内核模块依赖图Gfunc;所述内核模块依赖图Gdep以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的关系作为节点之间的有向边;所述函数关系内核模块依赖图Gfunc以内核模块作为节点、内核模块调用其他内核模块的任意内核功能函数的内核功能函数名作为节点之间的有向边;比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合;
3)根据内核模块依赖图Gdep的影响传递规则,结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域;根据内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域;
4)将第一确定影响域、第二确定影响域、第一影响域、第二影响域输出。
2.根据权利要求1所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤2)中构建内核模块依赖图Gdep的步骤包括:
A0)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS,
A1)从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
A2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在所有任意内核功能函数调用关系的内核模块;
A3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,并将节点及其有向边添加到内核模块依赖图Gdep,跳转执行步骤A1)。
3.根据权利要求1所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤A2)的详细步骤包括:
A2.1)获取当前内核模块M.ko的符号表S;
A2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空;
A2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕,则跳转执行步骤A2.7);
A2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤A2.5);如果是CallFun函数,则跳转执行步骤A2.6);否则跳转执行步骤A2.3);
A2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,所述相向内核模块具体是指当前函数F在该内核模块的CallFun表中,跳转执行步骤A2.3);
A2.6)获取CallFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,所述背离内核模块具体是指当前函数F在该内核模块的InFun表中;跳转执行步骤A2.3);
A2.7)将相向模块集合MNFS和背离模块集合MNBS,作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,分别记为当前内核模块M.ko的相向模块集合和背离内核模块集合;跳转执行步骤A3)。
4.根据权利要求1所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤2)中构建函数关系内核模块依赖图Gfunc的步骤如下:
B0)将原始版本v1的内核模块集KMS1赋值给内核模块集KMS;
B1)从内核模块集KMS中遍历取出一个当前内核模块M.ko,如果内核模块集KMS已经遍历完毕,则结束并输出构建内核模块依赖图Gdep;否则,跳转执行步骤A2);
B2)获取当前内核模块M.ko在原始版本v1的内核模块集KMS1中存在任意内核功能函数调用关系的内核模块;
B3)将当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块作为节点,当前内核模块M.ko及其存在任意内核功能函数调用关系的内核模块之间的依赖关系作为从当前内核模块M.ko指向对应内核模块的有向边,且该有向边的名称为对应的内核功能函数,并将节点及其有向边添加到函数关系内核模块依赖图Gfunc,跳转执行步骤B1)。
5.根据权利要求4所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤B2)的详细步骤包括:
B2.1)获取当前内核模块M.ko的符号表S;
B2.2)初始化相向模块集合MNFS和背离模块集合MNBS为空;
B2.3)从符号表S中遍历取出一个当前函数F,如果符号表S已经遍历完毕,则跳转执行步骤B2.7);
B2.4)判断当前函数F是否为InFun函数,如果是InFun函数,则跳转执行步骤B2.5);如果是CallFun函数,则跳转执行步骤B2.6);否则跳转执行步骤B2.3);
B2.5)获取InFun函数在原始版本v1的内核模块集KMS1中的所有相向内核模块并将其添加到相向模块集合MNFS中,所述相向内核模块具体是指当前函数F在该内核模块的CallFun表中;跳转执行步骤B2.3);
B2.6)获取InFun函数在原始版本v1的内核模块集KMS1中的所有背离内核模块并将其添加到背离模块集合MNBS中,所述背离内核模块具体是指当前函数F在该内核模块的InFun表中;跳转执行步骤B2.3);
B2.7)将相向模块集合MNFS和背离模块集合MNBS取并集作为当前内核模块M.ko存在任意内核功能函数调用关系的内核模块,分别记为当前内核模块M.ko的相向模块集合和背离内核模块集合;跳转执行步骤B 3)。
6.根据权利要求1所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤2)中比较原始版本v1和更新版本v2的版本差异得到目标内核模块的函数变化集合具体是指分别获取目标内核模块在原始版本v1和更新版本v2中的符号表和调试信息,分别比较符号表中的InFun函数变化和CallFun函数变化得到目标内核模块的函数变化集合。
7.根据权利要求3所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤3)中根据内核模块依赖图Gdep的影响传递规则结合函数变化集合确定目标内核模块的第一确定影响域和第一影响域的详细步骤包括:
获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合MNFS,输出该相向节点集合MNFS为第一确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第一影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在内核模块依赖图Gdep中的相向节点集合,输出该相向节点集合为第一确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第一影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在内核模块依赖图Gdep中的背离节点集合MNBS,输出该背离节点集合为第一确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为第一影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
8.根据权利要求4所述的基于函数依赖图的内核模块兼容影响域分析方法,其特征在于,步骤3)中根据内核模块依赖图Gfunc的影响传递规则结合函数变化集合确定目标内核模块的第二确定影响域和第二影响域的详细步骤包括:
获取目标内核模块的InFun函数的变化信息,并根据InFun函数的变化信息机械能分类处理:(I)如果InFun函数的变化为InFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为第二确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第二影响域;(II)如果InFun函数的变化为函数减少,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的相向节点集合MNFS,输出该相向节点集合MNFS为第二确定影响域,继续计算相向模块集合MNFS的相向节点闭包MNFS-A,输出为第二影响域;(III)如果InFun函数的变化为函数增加,则输出为模块发生变化暂无可见影响;(IV)如果InFun函数的变化为函数语义发生变化,则输出为模块发生变化暂无可见影响;
获取目标内核模块的CallFun函数的变化信息,并根据CallFun函数的变化信息机械能分类处理:(I)如果CallFun函数的变化为CallFun函数参数变化,则计算目标内核模块在函数关系内核模块依赖图Gfunc中的背离节点集合MNBS,输出该背离节点集合MNBS为第二确定影响域,继续计算MNBS的相向节点闭包MNBS-A,输出为第二影响域;(II)如果CallFun函数的变化为函数增加,输出模块变化类型;(III)如果CallFun函数的变化为函数减少,输出为模块发生变化暂无可见影响;(IV)如果CallFun函数的变化为函数语义发生变化,输出为模块发生变化暂无可见影响。
9.一种基于函数依赖图的内核模块兼容影响域分析系统,包括计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~8中任意一项所述基于函数依赖图的内核模块兼容影响域分析方法的步骤,或者该计算机设备的存储器上存储有被编程或配置以执行权利要求1~8中任意一项所述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1~8中任意一项所述基于函数依赖图的内核模块兼容影响域分析方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911365787.0A CN111008152B (zh) | 2019-12-26 | 2019-12-26 | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911365787.0A CN111008152B (zh) | 2019-12-26 | 2019-12-26 | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111008152A true CN111008152A (zh) | 2020-04-14 |
CN111008152B CN111008152B (zh) | 2022-10-11 |
Family
ID=70118665
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911365787.0A Active CN111008152B (zh) | 2019-12-26 | 2019-12-26 | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111008152B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966383A (zh) * | 2020-09-03 | 2020-11-20 | 中国人民解放军国防科技大学 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
CN112256926A (zh) * | 2020-10-21 | 2021-01-22 | 西安电子科技大学 | 一种云环境中科学工作流数据集的存储方法 |
CN112860267A (zh) * | 2021-04-23 | 2021-05-28 | 武汉深之度科技有限公司 | 一种内核裁剪方法及计算设备 |
CN113672269A (zh) * | 2021-10-21 | 2021-11-19 | 阿里云计算有限公司 | 数据处理方法、系统、电子设备及程序产品 |
CN113672282A (zh) * | 2021-10-21 | 2021-11-19 | 阿里云计算有限公司 | 数据处理方法、设备、产品及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699389A (zh) * | 2013-12-30 | 2014-04-02 | 北京大学 | 一种基于编译选项的Linux内核模块关系提取方法 |
CN108319858A (zh) * | 2018-01-29 | 2018-07-24 | 中国科学院信息工程研究所 | 针对不安全函数的数据依赖图构建方法及装置 |
CN110543423A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 一种软件依赖包能力检测方法、系统及介质 |
-
2019
- 2019-12-26 CN CN201911365787.0A patent/CN111008152B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103699389A (zh) * | 2013-12-30 | 2014-04-02 | 北京大学 | 一种基于编译选项的Linux内核模块关系提取方法 |
CN108319858A (zh) * | 2018-01-29 | 2018-07-24 | 中国科学院信息工程研究所 | 针对不安全函数的数据依赖图构建方法及装置 |
CN110543423A (zh) * | 2019-09-05 | 2019-12-06 | 中国人民解放军国防科技大学 | 一种软件依赖包能力检测方法、系统及介质 |
Non-Patent Citations (1)
Title |
---|
向勇等: "基于QEMU的动态函数调用跟踪", 《计算机研究与发展》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111966383A (zh) * | 2020-09-03 | 2020-11-20 | 中国人民解放军国防科技大学 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
CN111966383B (zh) * | 2020-09-03 | 2023-08-15 | 中国人民解放军国防科技大学 | 一种操作系统内核兼容性量化分析方法、系统和介质 |
CN112256926A (zh) * | 2020-10-21 | 2021-01-22 | 西安电子科技大学 | 一种云环境中科学工作流数据集的存储方法 |
CN112860267A (zh) * | 2021-04-23 | 2021-05-28 | 武汉深之度科技有限公司 | 一种内核裁剪方法及计算设备 |
CN113672269A (zh) * | 2021-10-21 | 2021-11-19 | 阿里云计算有限公司 | 数据处理方法、系统、电子设备及程序产品 |
CN113672282A (zh) * | 2021-10-21 | 2021-11-19 | 阿里云计算有限公司 | 数据处理方法、设备、产品及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111008152B (zh) | 2022-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111008152B (zh) | 一种基于函数依赖图的内核模块兼容影响域分析方法、系统和介质 | |
US7657867B2 (en) | System and method for generating a predicate abstraction of a program | |
McPeak et al. | Data structure specifications via local equality axioms | |
CN103778061B (zh) | 数组越界错误的自动检测和校正方法 | |
Soeken et al. | Verifying dynamic aspects of UML models | |
EP3769243A1 (en) | Method and system for assessing future execution of a smart contract based on previous executions on a blockchain-based platform | |
CN112100954A (zh) | 验证芯片的方法、装置和计算机存储介质 | |
US20210365555A1 (en) | A method and system for detecting and preventing issues in smart contracts based on historical behavior analysis | |
CN102841844B (zh) | 一种基于简易符号执行的二进制代码漏洞挖掘方法 | |
US20210103514A1 (en) | Reusable test cases for identifiable patterns | |
JP7047969B2 (ja) | 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法 | |
CN111104335A (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
JP6528465B2 (ja) | ソフトウェアテストのためのシンボリック実行における状態パラメータ化 | |
US10210296B2 (en) | Adaptive bug-search depth for simple and deep counterexamples | |
KR20150130298A (ko) | 컨트랙트에 대한 운영 체제 지원 기법 | |
US20140137085A1 (en) | Electronic system, onboard modular execution platform and method ensuring partitioning of configurable decision-making rules | |
US9646252B2 (en) | Template clauses based SAT techniques | |
CN110807195B (zh) | 一种智能合约的发布方法、发布平台装置及发布系统 | |
US20230141948A1 (en) | Analysis and Testing of Embedded Code | |
Kwon et al. | Proving flow security of sequential logic via automatically-synthesized relational invariants | |
KR102378377B1 (ko) | 스마트 컨트랙트 내의 취약 트랜잭션 시퀀스 획득 장치 및 방법 | |
US11176010B2 (en) | Circuit-cycle reproduction | |
US11361234B2 (en) | Real-world execution of contingent plans | |
Bernardeschi et al. | Verifying data secure flow in AUTOSAR models | |
Fehnker et al. | Model checking dataflow for malicious input |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |