CN100492301C - 避免软件冲突的方法和系统 - Google Patents
避免软件冲突的方法和系统 Download PDFInfo
- Publication number
- CN100492301C CN100492301C CN200510137085.9A CN200510137085A CN100492301C CN 100492301 C CN100492301 C CN 100492301C CN 200510137085 A CN200510137085 A CN 200510137085A CN 100492301 C CN100492301 C CN 100492301C
- Authority
- CN
- China
- Prior art keywords
- storehouse
- function
- called
- conflict
- module
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 116
- 230000008569 process Effects 0.000 claims description 38
- 230000035943 smell Effects 0.000 claims description 31
- 238000012544 monitoring process Methods 0.000 claims description 21
- 238000009434 installation Methods 0.000 claims description 17
- 238000004321 preservation Methods 0.000 claims description 6
- 230000037430 deletion Effects 0.000 claims description 5
- 230000009471 action Effects 0.000 claims description 4
- 238000012546 transfer Methods 0.000 abstract 3
- 229910002056 binary alloy Inorganic materials 0.000 abstract 1
- 238000013404 process transfer Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 190
- 238000010586 diagram Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 239000000463 material Substances 0.000 description 7
- 241001062472 Stokellia anisodon Species 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000008676 import Effects 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000012217 deletion Methods 0.000 description 2
- 230000004069 differentiation Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000009897 systematic effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000007423 decrease Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000002243 precursor Substances 0.000 description 1
- 238000011946 reduction process Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
Images
Classifications
-
- 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/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44552—Conflict resolution, i.e. enabling coexistence of conflicting executables
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明的目的是提供一种防止软件冲突的方法/系统,将库划分为第1层到第M层,M≥1。所述方法包括:(a)在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数;(b)如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;以及(c)当该程序调用所述由其直接调用的库时,如果保存有与其相应的冲突信息,则放弃加载该库,否则,加载该库。
Description
技术领域
本发明涉及避免软件冲突,具体地说,涉及避免软件冲突的方法和系统。
背景技术
就终端用户操作计算机的经历而言,软件冲突是一个严重的问题。当发生软件冲突时,应用将报告错误或者不能完成一些有用的功能。更加糟糕的是:一些软件冲突不仅禁用当前应用,而且使计算机系统崩溃,由此终端用户必须重新启动计算机。软件冲突的原因主要有如下两方面:
(1)程序错误;
(2)动态链接库/库/平台的原因,比如:因为动态链接库/库/平台升级或者删除,所以执行调用的程序与所调用的动态链接库/库/平台之间出现如下情况:在所述库中缺少被调用的函数、所调用的参数的个数与执行调用的程序的二进制可执行代码失配、所调用的参数的类型与执行调用的程序的二进制可执行代码失配或者所调用的函数的返回类型与执行调用的程序二进制可执行代码失配,即,调用方与被调用方之间的依赖关系失配。这样,使用者不能通过计算机完成所需的信息存储或处理。
原因(1)的程序错误可由开发者通过严格的测试来解决。本发明主要针对于原因(2),即库依赖。众所周知,软件包括可执行文件和库(诸如:windows的动态链接库或者linux/unix的lib/so/a)。库由软件或平台来提供。当可执行文件运行时,它将库加载到它的用户空间,并且根据地址或者名称空间来调用该库。当软件加载失配的库时,特别是当该库升级时,冲突发生。此时,软件试图调用库中的函数,但是由于升级的原因导致参数变化或者返回值变化,甚至从该库中删除了该函数。由此该库不能提供正确的函数,所以软件的运行将终止。
针对上述问题,在现有技术中通常采用三种方法。方法(1):当运行库时检查该库的版本。如果版本失配,则退出可执行文件以避免计算机系统崩溃(如美国专利US 6,397,378B1“TEST EXECUTIVE SYSTEM AND METHODINCLUDING DISTRIBUTED TYPE STORAGE AND CONFLICT RESOLUTI0N”)。方法(2):减小库的依赖。例如,让可执行文件仅使用长期不会发生变化的库的基本函数。该方法能够完美地解决上述问题,但是它需要开发者逐条重写源代码,这需要大量的人力和物力。方法(3)涉及虚拟机技术。如果在操作系统上仅运行唯一的软件,则将永远不会导致冲突。于是,在计算机上可以构建多台虚拟机,并且在每台虚拟机上仅运行一个应用。该方法并不理想,其原因为(I)这将导致计算机性能的显著下降;(II)这与库的目的相悖,在虚拟机上,库如同应用的私有库,不能被其它应用共享。
发明内容
有鉴于上述情况,本发明的目的是提供一种防止软件冲突的方法/系统,因为其中的预扫描步骤/模块预扫描至少三种语法冲突,所以相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为其中的预扫描步骤/模块预扫描全部库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为其中的预扫描步骤/模块预扫描全部库函数,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够带来如下技术效果:(I)提高计算机的存储和处理性能;(II)库能被其它应用共享。
本发明的另一目的是提供一种防止软件冲突的方法/系统,因为其中的嗅探步骤/模块找出导致崩溃的库,所以相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为其中的嗅探步骤/模块监控全部导致崩溃的库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为其中的嗅探步骤/模块监控的调用序列至少包括一段可执行代码,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够带来如下技术效果:(I)提高计算机性能的存储和处理;(II)库能被其它应用共享。
本发明的另一目的是提供一种结合上述两种方法/系统的防止软件冲突的方法/系统,在结合上述两种方式的基础之上,不仅通过预扫描步骤在程序执行前对于软件冲突进行预防,而且对于通过预扫描的、却在实际调用过程中发生软件冲突的库进行监控并记录,进而防止通过了预扫描却发生软件冲突的库在下一次调用中再次发生软件冲突。
为了实现上述目的,本发明提供一种在程序调用至少一个库的操作中防止软件冲突的方法,其中按照所述至少一个库之间的依赖关系将所述至少一个库划分为第1层到第M层,每一层具有至少一个库,M≥1,包括步骤:(a)在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,以便判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突;(b)如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;以及(c)当在运行的所述程序的调用序列中出现所述调用方函数调用相应的被调用方函数时,如果保存有指示该调用冲突的冲突信息,则放弃加载该被调用方函数的库,否则,加载该库。
根据本发明的另一个方面,提供一种在程序调用至少一个库的操作中防止软件冲突的系统,其中按照所述调用次序该至少一个库分为M层,每一层具有至少一个库,M≥1,包括:一预扫描模块,在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,以便判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突;一冲突信息知识保存模块,如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;和一库加载模块,当在运行的所述程序的调用序列中出现所述调用方函数调用相应的被调用方函数时,如果保存有指示该调用冲突的冲突信息,则放弃加载该被调用方函数的库,否则,加载该库。
根据本发明的另一个方面,提供一种在程序调用至少一个库的操作中防止软件冲突的方法,其中按照所述调用次序将该至少一个库分为M层,每一层具有至少一个库,M≥1,包括步骤:(a)当执行所述程序的二进制可执行代码时,监控所述程序的二进制可执行代码的调用序列的当前运行的一段可执行代码,该调用序列调用所述M层库中的库函数;(b)如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;以及(c)当该调用序列再次调用该库的一个函数时,如果保存有与该库相应的冲突信息,则放弃加载该库,否则,加载该库。
根据本发明的另一个方面,提供一种在程序调用至少一个库的操作中防止软件冲突的系统,其中按照所述调用次序将该至少一个库分为M层,每一层具有至少一个库,M≥1,包括:一嗅探模块,当执行所述程序的二进制可执行代码时,监控所述程序的二进制可执行代码的调用序列的当前运行的一段可执行代码,该调用序列调用所述M层库中的库函数;一冲突信息知识保存模块,如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;和一库加载模块,当该调用序列再次调用该库的一个函数时,如果保存有与该库相应的冲突信息,则放弃加载该库,否则,加载该库。
附图说明
通过以下借助附图的详细描述,将会更容易地理解本发明,其中相同的标号指定相同结构的单元,并且在其中:
图1示出根据程序的二进制可执行代码及其所调用的多个库所生成的依赖关系树;
图2A示出根据有效依赖关系对图1的依赖关系树裁减后的依赖关系树;
图2B示出根据图2A的依赖关系树得到冲突知识的示意图;
图3示出根据本发明一个优选实施例进行预扫描的流程图;
图4A示出冲突信息知识保存模块保存由预扫描步骤/模块得到的至少一个分别指示至少一个冲突的冲突信息的数据结构;
图4B示出冲突信息知识保存模块保存由嗅探步骤/模块得到的至少一个分别指示至少一个冲突的冲突信息的数据结构;
图5示出根据本发明另一个优选实施例进行嗅探的流程图;
图6示出调用堆栈的结构;
图7示出根据本发明的一个优选实施例的预扫描模块的系统架构图;
图8示出根据本发明的操作系统中的进程的存储器映像;和
图9示出根据本发明的另一个优选实施例的嗅探模块的系统架构图。
具体实施方式
本发明的防止软件冲突的方法/系统可分为两种:采用预扫描方法/模块;或者,采用嗅探方法/模块。但是,本领域的技术人员应当了解集成预扫描方法/模块和嗅探方法/模块也是可行的,其原因为它们分别在不同的工作阶段中检测程序及其所依赖的库之间的冲突。表1示出上述方法/系统的组合方式:
方式1 | 方式2 | 方式3 | |
本发明的防止软件冲突的方法 | 安装/卸载库的步骤、预扫描步骤、避免软件冲突步骤 | 安装/卸载库的步骤、嗅探步骤、避免软件冲突步骤 | 安装/卸载库的步骤、预扫描步骤、嗅探步骤、避免软件冲突步骤 |
本发明的防止软件冲突的系统 | 安装/卸载库模块、预扫描模块、避免软件冲突模块 | 安装/卸载库模块、嗅探模块、避免软件冲突模块 | 安装/卸载库模块、预扫描模块、嗅探模块、避免软件冲突模块 |
表1
预扫描方法/模块是在程序运行前预扫描该程序的二进制可执行代码,由此在该阶段中检测出会导致软件冲突的语法冲突。
嗅探方法/模块是在程序运行时监控该程序的二进制可执行代码,并记录调用堆栈。如果进程崩溃,则嗅探方法/模块试图找出导致该崩溃的库。
下面将结合附图详细描述作为本发明的优选实施例的方式3。在下面的描述中,现有避免软件冲突的方法和系统中公知的步骤和单元将不再详细描述,以免以不必要的细节混淆本发明。
I.防止软件冲突的方法
按照防止软件冲突的方法的步骤执行的次序,将该方法分析为:安装/卸载库的步骤、预扫描步骤和/或嗅探步骤、避免软件冲突步骤。
A.安装/卸载库的步骤
众所周知,计算机操作系统在软件安装/启动初始化期间,一安装/删除模块将全部的库移动至一库数据库;以及在软件删除/关机期间,该安装/删除模块将该库从该库数据库除去。其通过对如下优选的记录结构操作,来完成上述步骤:
Process Name//进程名称
Conflict/un-conflict//冲突或不冲突
Library calln ame//库调用名称
Library index number in“Libraries Database”//在库数据库中库
//的索引号
在上述所加载的库中,可能存在由于背景技术部分中所述的第(2)方面的原因而导致软件冲突的库的存在。在随后的步骤中,本发明的方法将根据该库数据库中所记录的库进行一系列的处理,从而防止软件冲突的发生或再次发生。
B.预扫描步骤
作为优选实施例的预扫描步骤进一步分为:
(a)记录依赖关系的步骤;
(b)根据有效依赖关系对该依赖关系进行裁减得到有效依赖关系树;
(c)基于有效依赖关系树,根据被调用函数的参数的个数与调用函数的参数的个数是否失配、被调用函数的参数的类型与调用函数的参数的类型是否失配或者被调用的函数的返回类型与调用的函数的返回类型是否失配得到冲突知识的步骤。
作为优选实施例,本发明采用作为公知技术的数据结构“树”及其“操作”(比如,插入、删除、合并、遍历等)来记录依赖关系。也就是说,依赖关系树是数据结构“树”的一个实例,其记录了可执行文件的二进制可执行代码与其可能调用的库数据库中所记录的库的依赖关系。本领域的技术人员应当了解,“树”并不对于本发明的范围进行限制,其它能够实现该依赖关系的数据结构,比如“图”、“表”及其操作等,也在本发明的范围之内。本领域的技术人员还应当了解本发明的优选实施例通过采用前序遍历完成预扫描并不对于本发明的范围进行限制,其它遍历方式,比如“中序”、“后序”及其操作等,也在本发明的范围之内。
(a)记录依赖关系的步骤
图1示出了生成依赖关系树的过程。其中,树的节点表示可执行文件或者其调用的库,树的指针表示由作为后继的节点所表示的库对由作为前趋的节点所表示的库的依赖关系。在本优选实施例中,将表示可执行文件A.EXE的节点作为根节点,用A表示。作为公知技术,可执行文件A.EXE包括参考表(reference table),其记录该执行文件A.EXE的函数所调用的库的函数,对本优选实施例来讲:库B的函数X1、库C的函数X2和库C的函数X3。根据上述调用关系,对于根节点A分别生成左、右后继节点B、C,其中节点B表示库B,节点C表示库C。节点A分别通过左、右指针指向节点B、C,该左、右指针分别表示二进制执行文件A.EXE对库B、C的依赖关系。基于相似的方式,根据库B的参考表中的内容,库B调用库D的函数Y1,调用库D的函数Y2,调用库E的函数Y3,生成节点B的左、右后继节点D、E。其中,节点D表示库D,节点E表示库E,该左、右指针分别表示库B对库D、E的依赖关系。由于库C、D、E的参考表为空,所以对上述节点来讲没有后继节点生成。伴随着上述树的生成过程,我们得到如下结果:可执行文件A.EXE(节点A)依赖库B和库C(节点B和节点C),库B(节点B)依赖库D和库E(节点D和节点E)。
优选地,上述关系依赖树的生成过程的代码实现如下:
Function build_dependency_tree(object x)//x为可执行程序或dll
Begin
Read ref table of x
For each element i in ref table do
Begin
Record(x,i,false)into tree db.
Build_dependency_tree(i);
end
End
这样,根据可执行文件的二进制可执行代码生成了依赖关系树,其记录了当前执行文件与库以及库与库之间的依赖关系。但是,上述依赖关系建立的基础仅仅是在可执行文件或库的参考表中作了调用方和被调用方名称之间的匹配,而仅仅在调用方名称和被调用方名称之间的匹配并不能够足以避免由背景技术部分中的方面(2)所引起的软件冲突,也就是说,按照上述依赖关系中的某些依赖关系进行函数调用仍然会导致软件冲突。由此,有必要对上述依赖关系作必要的选择以便进一步删除那些会导致软件冲突的依赖关系,即进行下面的步骤(b)和(c)。其中,步骤(b)是优选的,其通过裁减生成有效依赖树进而能够减少步骤(c)中的遍历的次数,由此提高效率。
(b)根据有效依赖关系对该依赖关系进行裁减生成有效依赖关系树
首先,我们给出有效依赖关系的定义:实体1依赖实体2,同时实体2依赖实体3,如果在实体1存在某一函数,该函数通过调用实体2的函数而进一步调用实体3的函数,则我们称对于实体1来讲,实体2有效依赖实体3,否则为非有效依赖。比如,程序的可执行代码A的某一函数调用库B的函数X1,同时库B的函数X1又调用库D的函数Y1,则对于程序A来讲库B有效依赖库D,如果不存在满足上述要求的可执行代码A的函数,则对于程序A来讲库B非有效依赖库D。
基于上述定义,如果实体1非有效依赖相应于实体3,那么会发生软件冲突,这正是本发明所要避免的。对于本发明的优选实施例来讲,缺乏有效依赖对应于被依赖的库中是否缺少被调用的函数。
图2A示出根据有效依赖关系对生成的依赖关系树进行裁减后的有效依赖关系树。即,根据在被调用的库中是否缺少被调用的函数来判断有效的依赖关系,进而对图1中的非有效依赖的节点进行裁减。裁减的过程如下:首先,遍历到节点A,并且扫描节点A所表示的可执行文件A.EXE的所有代码以便得到全部调用指令对应的函数名,就本优选实施而言,可以是库B的函数X1、库C的函数X2和库C的函数X3。由于执行文件A.EXE调用库B的函数X1,所以节点A有效依赖节点B。然后,遍历到节点B,扫描节点B所表示的库B的所有代码以便找出由可执行文件A.EXE所调用的库B的函数X1所调用的库D、E的函数。这里有必要说明,虽然库B调用库D的函数Y1、库D的函数Y2和库E的函数Y3,但是由可执行文件A.EXE所调用的库B的函数,比如:X1,却不一定调用这三个函数中的每一个,即库B的函数X1可能调用其中之一或者其中的两个,具体到该优选实施例中,库B的函数X1调用D的函数Y1和库D的函数Y2,却不调用库E的函数Y3。然后,遍历到节点D,由于由执行文件A.EXE调用的库B的函数X1调用D的函数Y1和库D的函数Y2,所以节点A有效依赖节点D。然后遍历到节点E,由于由执行文件A.EXE调用的库B的函数X1不调用库E的函数Y3,所以节点A不有效依赖节点E。然后遍历到节点C,由于执行文件A.EXE调用库C的函数X2和库C的函数X3,所以节点A有效依赖节点C。最后,裁减上述非有效依赖节点E。由此生成了如图2A所示的有效关系依赖树,其中可执行文件A.EXE(节点A)依赖库B和库C(节点B和节点C),库B(节点B)依赖库D(节点D)。
优选地,上述各节点之间的依赖关系可以采用如下形式存放:
依赖关系记录:Nodel,Node2,boolean
表达语义为,Node1依赖Node2,boolean为临时变量,用于筛选。比如:节点A依赖节点B的记录为:A,B,兼容,节点A不依赖节点B的记录为:A,B,冲突,并且记录缺省也表示不依赖。
优选地,裁减过程的代码实现如下:
开始时候,
x=Exe.a;
run build_valid_dependency(x);
Function build_valid_dependency_tree(objectx)//x为函数
Begin
Scan code inx;//扫描x中的所有代码
For each call/jump/longjump in code do//针对每一个函数调用指
//令
Begin
y=调用指令对应的函数名
xa=x所在的dll或exe文件;
ya=y所在的dll或exe文件;
修改记录为(xa,ya,true);//记录xa有效依赖ya的结果为真Build_valid_dependency_tree(y);
end
End
对于本优选实施例来讲,生成如下依赖关系记录:A,B,兼容;B,D,兼容;B,E,冲突;A,C,兼容。
由于在有效依赖树中裁减掉了该程序的可执行代码实际上不会调用的库的节点,比如节点E,所以相对于未裁减的依赖关系树来讲可以提高对有效依赖关系树的操作的速度,比如遍历,而不降低预扫描的精确度。
(c)基于有效依赖关系树,根据被调用函数的参数的个数与调用函数的参数的个数是否失配/被调用函数的参数的类型与调用函数的参数的类型是否失配/被调用的函数的返回类型与调用的函数的返回类型是否失配得到冲突知识的步骤
如果有如下情况之一:被调用函数的参数的个数与调用函数的参数的个数失配、被调用函数的参数的类型与调用函数的参数的类型失配、被调用的函数的返回类型与调用的函数的返回类型失配,则判断为非有效依赖关系。基于上述定义,如果存在上述非有效依赖关系,那么也会发生软件冲突,这正是本发明所要避免的。
图2B示出根据所调用的参数的个数与所述二进制可执行代码是否失配/所调用的参数的类型与所述二进制可执行代码是否失配/所调用的函数的返回类型与所述二进制可执行代码是否失配来判断是否存在依赖关系,得到冲突知识。首先,遍历到节点A,并且扫描节点A所表示的可执行文件A.EXE的所有代码以便扫描全部调用指令对应的函数在调用之前的参数类型/个数/返回类型,就本优选实施而言,可以是库B的函数X1、库C的函数X2和库C的函数X3在调用之前的参数类型/个数/返回类型。然后,遍历到节点B,扫描库B的函数X1中需要传入的参数类型/个数/返回类型和库B所调用的库D的函数Y1、库D的函数Y2在调用之前的参数类型/个数/返回类型,并且将所述库B的函数X1在调用之前的参数类型/个数/返回类型与所述库B的函数X1中需要传入的参数类型/个数/返回类型分别进行比较,如果不符合,则修改节点A与节点B的依赖关系记录,以便形成冲突知识。然后,遍历到节点D,扫描库D的函数Y1、库D的函数Y2中需要传入的参数类型/个数/返回类型,并且将所述库B所调用的库D的函数Y1、库D的函数Y2在调用之前的参数类型/个数/返回类型和库D的函数Y1、库D的函数Y2中需要传入的参数类型/个数/返回类型进行比较,如果不符合,则修改节点A与节点B的依赖关系记录,以便形成冲突知识。然后,遍历到节点C,扫描库C的函数X2、库C的函数X3中需要传入的参数类型/个数/返回类型,并且将所述库C的函数X2和库C的函数X3在调用之前的参数类型/个数/返回类型和库C的函数X2、库C的函数X3中需要传入的参数类型/个数/返回类型进行比较,如果不符合,则修改节点A与节点C的依赖关系记录,以便形成冲突知识。
例如,如果依据被调用函数的参数的个数与调用函数的参数的个数失配/被调用函数的参数的类型与调用函数的参数的类型失配/被调用的函数的返回类型与调用的函数的返回类型失配这一标准,通过上述步骤(c)得到可执行文件A与库B相配,库B与库D相配,而可执行文件A与C失配,则将当前依赖关系记录中的(A,C,兼容)修改为(A,C,冲突)。
优选地,上述过程的代码实现如下:
begin
For each record(xa,ya,boolean)in tree db do
Begin
Set“xa compatible with ya”;//扫描xa代码
For each callinstruction in xa do//对xa内每一处函数调用
//语句
Begin
If(the function called belongs to ya)then
begin
call_context1=xa中的调用之前的参数类型/个数/
返回类型
call_context2=对应ya的函数中需要传入的参数类
型个数/返回类型
if call_contextl!=call context2 then
Begin
Set“xa imcompatible with ya”;
Jump out of for circle
end
end
end
end
end
优选地,修改依赖关系记录的代码实现如下:
Delete record when boolean=false from tree db;//删除全部结果
//非真的记录
图4A示出一冲突信息知识保存模块保存由预扫描步骤得到的至少一个分别指示至少一个冲突的冲突信息的数据结构。其记录了上述修改的结果,即程序A与库B相兼容,A与库C相冲突,库B和库D相兼容。该数据结构优选为“表”,但是,本领域的技术人员应当了解利用其它的数据结构,比如“树”、“图”等,也可以记录上述冲突信息。
这里,我们按照所述调用次序将被程序的二进制可执行代码调用的库分为M层,每一层具有至少一个库,M≥1。比如,图1中的根节点A表示程序A的二进制可执行代码,按照其调用次序将由节点B、C表示的库B、C作为第一层,将由节点D、E表示的库D、E作为第二层,该程序A调用第一层的库B、C,第一层的库B调用第二层的库D、E,其中M=2。图3示出进行预扫描的流程图。步骤S301,在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数。比如,预扫描程序A中的调用方函数与其调用的库B中的函数X1。步骤S302,判断M是否大于1,如果是,则进入步骤S303,预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,比如,预扫描库B中的调用函数与由其调用的库D的函数Y1和Y2,然后进入步骤S304;否则,进入步骤S304。在步骤S304,判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突,比如:被调用方函数的参数的个数与调用方函数的参数的个数的失配、被调用函数方的参数的类型与调用方函数的参数的类型的失配或者被调用方的函数的返回类型与调用方的函数的返回类型的失配二进制可执行代码。具体来讲,所述调用方函数和相应的被调用方函数的冲突是语法失配。在步骤S305,如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息。
作为优选实施方式,在所述由程序所调用的M层库中,仅预扫描该程序有效依赖的库。
因为该预扫描步骤预扫描至少三种语法冲突,所以相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为该预扫描步骤预扫描全部库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为该预扫描步骤预扫描全部库函数,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够(I)提高计算机性能;(II)库能被其它应用共享。
C.嗅探步骤
图5示出嗅探步骤的流程图。嗅探步骤是在程序运行时监控该程序的二进制可执行代码,并记录调用堆栈。如果进程崩溃,则嗅探方法试图找出导致该崩溃的库。
在步骤S501,一嗅探模块监控程序的调用序列的当前运行的一段可执行代码。所述调用序列可以包括至少一段可执行代码,其原因为:例如,存在如下的调用(符号“->”表示调用关系):程序A->库B->库C->库B->程序A->库C->库D,其中多次调用分别对应多段可执行代码。嗅探模块可采用调用堆栈监控模块(call stack monitor),调用堆栈监控模块是在IBMTivoli系列系统管理软件里面常用的一种系统监视技术,该技术通过检查在应用程序中、函数调用前后堆栈的变化是否符合一定的模式(pattern),以判断此应用程序是否处于异常/正常状态。在本发明中,其监控代码寄存器或特殊指令以便记录在所述调用序列调用所述库函数期间的全部调用/返回动作,所述特殊指令是调用或长/远跳转指令,监控在所述调用序列调用所述库函数期间的所执行的可执行代码与所执行的库代码之间的数据交换,以及通过检查调用堆栈来找出当前使用的库。
图6示出调用堆栈的结构。比如,该调用堆栈可以记录了由可执行代码A的调用方函数调用库B的被调用方函数1,并且记录了由A传递给B的参数X和Y。
在步骤S502,在所述调用序列调用库函数的过程中是否发现所述调用序列崩溃,比如:错误中断或异常发生。如果,未发现,则不作处理;否则在步骤S503,嗅探模块判别当前的线程信息,例如:当前的线程信息为所述调用序列仅包括一段还是多段可执行代码。如果所述调用序列仅包括一段可执行代码,则在步骤S504执行所述冲突信息保存步骤,否则,在步骤S505嗅探模块跟踪在所述冲突之前的最后函数调用中所交换的数据,以便提取导致该冲突的调用序列的最后一段可执行代码并且找出操作过该数据的库,然后前进到所述步骤S504,执行所述冲突信息保存步骤。比如,库B的函数X1调用库D的函数Y1时发生崩溃,则将库B和库D发生冲突的信息保存。步骤S504保存冲突信息的方式可以通过修改现有的依赖关系记录来完成,例如在预扫描步骤中所生成的依赖关系记录,或者通过修改由嗅探步骤自身生成的依赖关系记录来完成。作为优选实施例,采用前一种方式。即,在图4A所示的依赖关系记录的基础上,将记录(B,D,兼容)改为(B,D,冲突)。图4B示出冲突信息知识保存模块保存由嗅探步骤所得到的指示至少一个冲突的冲突信息的数据结构。
步骤S501至S505的代码实现如下:
Begin
Read current TC(thread context)information
Read call stack entrance of current TC
Set ADDR=the latest address pushed in stack
Set ya=the library which ADDR belongs to
Query xa=the initiator which call ya from dependency_tree
(database).
Record(xa incompatible with ya)
End
因为嗅探步骤找出导致崩溃的库,所以相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为嗅探步骤监控全部导致崩溃的库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为嗅探步骤监控的调用序列至少包括一段可执行代码,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够(I)提高计算机性能;(II)库能被其它应用共享。
D.避免软件冲突步骤
众所周知,库加载模块通常是一挂接应用(hook application),其挂接全部dll加载模块应用和文件打开库,诸如:Loadlibrary()和CreatFile()。当执行所述程序时,即执行其可执行二进制代码时,当在所述程序的调用序列中出现上述调用方函数调用相应的被调用方函数时,如果在该冲突信息知识保存模块中保存有与该库相应的冲突信息,则库加载模块放弃加载该库,否则,该库加载模块加载该库。当运行程序A的可执行代码时,例如存在如下情况,被运行的程序A的调用序列包括:程序A调用库B的函数X1,而库B的函数X1又调用库D的函数Y1。根据依赖关系记录,程序A与库B兼容,而库B与库D冲突,所以,程序A的调用序列通过Loadlibrary()加载库B,而放弃加载库D。
优选地,如果所调用的库是新的,则当存在至少一个所述库时,该库加载模块随机选择所述至少一个库之一;否则:当在该冲突信息知识保存模块中存在关于该调用序列和该库的不冲突记录时,该库加载模块加载该库到进程空间;否则,放弃加载该库到进程空间。一显示部件提示用户是否关闭所述导致该冲突的调用序列的进程。
作为上述方式(3),通过将上述预扫描步骤和嗅探步骤相结合,其所带来的技术效果是:不仅通过预扫描步骤在程序执行前对于软件冲突进行预防,而且对于通过预扫描的、却在实际调用过程中发生软件冲突的库进行监控并记录,进而防止通过了预扫描却发生软件冲突的库在下一次调用中再次发生软件冲突。此外,相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为预扫描步骤和嗅探步骤检查全部库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为预扫描步骤和嗅探步骤检查全部库函数,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够(I)提高计算机性能;(II)库能被其它应用共享。
II.防止软件冲突的系统
图7示出根据本发明的一个优选实施例的系统架构图。按照防止软件冲突的系统的功能,将该系统分析为:预扫描模块701、冲突信息知识存储模块702、安装/卸载库模块703、库加载模块704和库数据库705,其中,部分II中所述的防止软件冲突的系统的各个模块与部分I中的防止软件冲突的方法中的步骤相对应,所以将结合部分I对部分II逐一说明上述模块。
安装/卸载库模块703执行所述的安装/卸载库的步骤,其目标是库数据库705。在库数据库705中,存储当前计算机中全部的库。
其优选的记录结构如下:
Process Name//进程名称
Conflict/un-conflict//冲突或不冲突
Library call name//库调用名称
Library index number in“Libraries Database”//在库数据库中库
的索引号
根据所述的预扫描步骤,预扫描模块701将对于程序的二进制可执行代码和库数据库705中所记录的该程序的二进制可执行代码所调用的库进行一系列的预扫描,并且冲突信息知识保存模块702保存至少一个分别指示至少一个冲突的冲突信息的数据结构。然后,按照所述避免软件冲突步骤,如果在冲突信息知识保存模块702中保存有与该库相应的冲突信息,则库加载模块704放弃加载该库,否则,库加载模块704加载该库。
图8示出根据本发明的操作系统中进程的存储器映像。一个进程能够在其空间中加载多个库。从用户模式(进程1的用户空间)可以看出,由库加载模块704加载的、与进程1无冲突的多个库1、2......m和系统库ntdll.dll/win。从内核模式可以看出,进程1、2......n根据地址或名称空间调用库函数。优选地,必须将系统库加载到固定地址,该系统库作为进程使用内核资源的桥梁,例如系统调用、中断等。在windows中,系统库是ntdll.dll,其连接内核和windows环境(包括kerne132.dll,user32.dll,advapi32.dll,gdi32.dll等)。
图9示出根据本发明的另一个优选实施例的系统架构图。按照防止软件冲突的系统的功能,将该系统分析为:嗅探模块901、冲突信息知识存储模块902、安装/卸载库模块903、库加载模块904和库数据库905。其中,冲突信息知识存储模块902、安装/卸载库模块903、库加载模块904和库数据库905与图7中的冲突信息知识存储模块702、安装/卸载库模块703、库加载模块704和库数据库705相同,为了简洁,
下面只描述与图7不同的部分,嗅探模块901。
按照上述嗅探步骤,嗅探模块901是在程序运行时监控该程序的二进制可执行代码,并记录调用堆栈。如果进程崩溃,则嗅探模块901试图找出导致该崩溃的库。
嗅探模块901采用调用堆栈监控模块(call stack monitor),调用堆栈监控模块是在IBM Tivoli系列系统管理软件里面常用的一种系统监视技术,该技术通过检查在应用程序中、函数调用前后堆栈的变化是否符合一定的模式(pattern),以判断此应用程序是否处于异常/正常状态。在本发明中,其监控代码寄存器或特殊指令以便记录在所述调用序列调用所述库函数期间的全部调用/返回动作,所述特殊指令是调用或长/远跳转指令,监控在所述调用序列调用所述库函数期间的所执行的可执行代码与所执行的库代码之间的数据交换,以及通过检查调用堆栈来找出当前使用的库。
如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,比如:错误中断或异常发生,则在随后的步骤中,嗅探模块901将关于该崩溃的冲突信息保存在冲突信息知识存储模块902中。优选地,嗅探模块901判别当前的线程信息,例如:当前的线程信息为所述调用序列仅包括一段还是多段可执行代码。如果所述调用序列仅包括一段可执行代码,则将冲突信息保存在冲突信息知识存储模块902中,否则,嗅探模块901跟踪在所述冲突之前的最后函数调用中所交换的数据,以便提取导致该冲突的调用序列的最后一段可执行代码并且找出操作过该数据的库,然后将冲突信息保存在冲突信息知识存储模块902中。
因为嗅探模块901找出导致崩溃的库,所以相对于仅扫描版本的现有技术中的方法(1)来讲,更加有效。因为嗅探模块901监控全部导致崩溃的库函数,所以相对于仅扫描基本库函数的现有技术中的方法(2)来讲,能够节约人力和物力。因为嗅探模块901监控的调用序列至少包括一段可执行代码,所以相对于采用虚拟机的现有技术中的方法(3)来讲,能够(I)提高计算机性能;(II)库能被其它应用共享。
优选地,预扫描模块701和嗅探模块901可以合并为一个模块,共同完成预扫描和嗅探。
以上结合附图描述了本发明的优选实施例,但是本发明并不仅限于该具体的实施方式。在不偏离权利要求的精神和范围的情况下,可以对其做出各种改变。
Claims (38)
1.一种在程序调用至少一个库的操作中防止软件冲突的方法,其中按照所述至少一个库之间的依赖关系将所述至少一个库划分为第1层到第M层,每一层具有至少一个库,M≥1,包括步骤:
(a)在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,以便判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突;
(b)如果存在至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;以及
(c)当在运行的所述程序的调用序列中出现所述调用方函数调用相应的被调用方函数时,如果保存有指示该调用冲突的冲突信息,则放弃加载该被调用方函数的库,否则,加载该库。
2.如权利要求1所述的防止软件冲突的方法,其中:根据所述程序的参考表及其所调用的库的参考表来确定:
与该程序的二进制可执行代码的调用相关的M层库;和
在该程序和该M层库中的依赖关系。
3.如权利要求2所述的防止软件冲突的方法,所述步骤(a)还包括:
在与该程序的二进制可执行代码的调用相关的M层库中,仅预扫描该程序有效依赖的库。
4.如权利要求3所述的防止软件冲突的方法,其中步骤(a)还包括:
所述调用方函数和相应的被调用方函数的冲突是语法失配。
5.如权利要求4所述的防止软件冲突的方法,其中所述语法为:
被调用方函数的参数的个数与调用方函数的参数的个数;
被调用函数方的参数的类型与调用方函数的参数的类型;和
被调用方的函数的返回类型与调用方的函数的返回类型。
6.如权利要求1所述的防止软件冲突的方法,其中:
以树来记录所述程序和由其调用的至少一个库之间的依赖关系,并且通过对树的遍历来完成所述预扫描。
7.如权利要求1所述的防止软件冲突的方法,在步骤(c)之后还包括步骤:
(d)当执行所述程序的二进制可执行代码时,监控所述程序的二进制可执行代码的调用序列的当前运行的一段可执行代码,该调用序列调用所述M层库中的库函数;
(e)如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;以及
(f)当该调用序列再次调用该库的一个函数时,如果保存有与该库相应的冲突信息,则放弃加载该库,否则,加载该库。
8.如权利要求7所述的防止软件冲突的方法,其中所述调用序列包括至少一段可执行代码。
9.如权利要求7所述的防止软件冲突的方法,其中所述步骤(d)进一步包括:
监控代码寄存器或特殊指令以便记录在所述调用序列调用所述库函数期间的全部调用/返回动作。
10.如权利要求9所述的防止软件冲突的方法,其中:
所述特殊指令是调用或长/远跳转指令。
11.如权利要求9所述的防止软件冲突的方法,其中所述步骤(d)进一步包括步骤:
监控在所述调用序列调用所述库函数期间的所执行的可执行代码与所执行的库代码之间的数据交换。
12.如权利要求9所述的防止软件冲突的方法,其中采用调用堆栈监控模块以进行所述监控。
13.如权利要求12所述的防止软件冲突的方法,其中所述调用堆栈监控模块通过检查调用堆栈来找出当前使用的库。
14.如权利要求1所述的防止软件冲突的方法,还包括:
在软件安装期间,将全部的库移动至一库数据库;以及
在软件删除期间,将该库从该库数据库除去。
15.如权利要求14所述的防止软件冲突的方法,还包括:
从该库数据库中加载库。
16.如权利要求11所述的防止软件冲突的方法,所述步骤(e)还包括:
如果所述调用序列仅包括一段可执行代码,则执行所述冲突信息保存步骤;
否则,跟踪在所述冲突之前的最后函数调用中所交换的数据,以便提取导致该冲突的调用序列的最后一段可执行代码并且找出操作过该数据的库,然后执行所述冲突信息保存步骤。
17.如权利要求15所述的防止软件冲突的方法,还包括:
一显示部件提示用户是否关闭导致该调用冲突的所述程序的调用序列的进程。
18.如权利要求15所述的防止软件冲突的方法,其中:
如果所调用的库是新的,则当存在至少一个所述库时,该库加载模块随机选择所述至少一个库之一;
否则:
当在该冲突信息知识保存模块中存在关于该调用序列和该库不冲突的记录时,该库加载模块加载该库到进程空间;
否则,放弃加载该库到进程空间。
19.一种在程序调用至少一个库的操作中防止软件冲突的系统,其中按照调用次序该至少一个库分为M层,每一层具有至少一个库,M≥1,包括:
一预扫描模块,在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由属于所述第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,以便判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突;
一冲突信息知识保存模块,如果存在至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;和
一库加载模块,当在运行的所述程序的调用序列中出现所述调用方函数调用相应的被调用方函数时,如果保存有指示该调用冲突的冲突信息,则放弃加载该被调用方函数的库,否则,加载该库。
20.如权利要求19所述的防止软件冲突的系统,其中根据所述程序的参考表及其所调用的库的参考表来确定:
与该程序的二进制可执行代码的调用相关的M层库;和
在该程序和该M层库中的依赖关系。
21.如权利要求20所述的防止软件冲突的系统,其中:
在与该程序的二进制可执行代码的调用相关的M层库中,仅预扫描该程序有效依赖的库。
22.如权利要求21所述的防止软件冲突的系统,其中:
所述调用方函数和相应的被调用方函数的冲突是语法失配。
23.如权利要求22所述的防止软件冲突的系统,其中所述语法为:
被调用方函数的参数的个数与调用方函数的参数的个数;
被调用函数方的参数的类型与调用方函数的参数的类型;和
被调用方的函数的返回类型与调用方的函数的返回类型。
24.如权利要求23所述的防止软件冲突的系统,其中:
以树来记录所述程序和由其调用的至少一个库之间的依赖关系,并且通过对树的遍历来完成所述预扫描。
25.如权利要求19所述的防止软件冲突的系统,还包括:
一嗅探模块,监控至少一个程序的调用序列的当前运行的一段可执行代码;
一冲突信息知识保存模块,如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;和
一库加载模块,当该调用序列再次调用该库的一个函数时,如果在该冲突信息知识保存模块中保存有与该库相应的冲突信息,则放弃加载该库,否则,该库加载模块加载该库。
26.如权利要求25所述的防止软件冲突的系统,其中所述调用序列包括至少一段可执行代码。
27.如权利要求25所述的防止软件冲突的系统,其中:
所述嗅探模块还监控代码寄存器或特殊指令以便记录在所述调用序列调用所述库函数期间的全部调用/返回动作。
28.如权利要求27所述的防止软件冲突的系统,其中:
所述特殊指令是调用或长/远跳转指令。
29.如权利要求27所述的防止软件冲突的系统,其中:
所述嗅探模块监控在所述调用序列调用所述库函数期间的所执行的可执行代码与所执行的库代码之间的数据交换。
30.如权利要求27所述的防止软件冲突的系统,其中所述嗅探模块采用调用堆栈监控模块。
31.如权利要求30所述的防止软件冲突的系统,其中所述调用堆栈监控模块通过检查调用堆栈来找出当前使用的库。
32.如权利要求19所述的防止软件冲突的系统,还包括:
一安装/删除模块,在软件安装期间将全部的库移动至一库数据库,以及在软件删除期间将该库从该库数据库除去。
33.如权利要求32所述的防止软件冲突的系统,还包括:
所述库加载模块从该库数据库中加载库。
34.如权利要求29所述的防止软件冲突的系统,其中:
如果所述调用序列仅包括一段可执行代码,则所述冲突信息知识保存模块保存所述冲突信息;
否则,所述嗅探模块跟踪在所述冲突之前的最后函数调用中所交换的数据,以便提取导致该冲突的调用序列的最后一段可执行代码并且找出操作过该数据的库,然后冲突信息知识保存模块保存所述冲突信息。
35.如权利要求33所述的防止软件冲突的系统,还包括:
一显示部件,提示用户是否关闭导致该调用冲突的所述程序的调用序列的进程。
36.如权利要求33所述的防止软件冲突的系统,其中:
如果所调用的库是新的,则当存在至少一个所述库时,该库加载模块随机选择所述至少一个库之一;
否则:
当在该冲突信息知识保存模块中存在关于该调用序列和该库不冲突
的记录时,该库加载模块加载该库到进程空间;
否则,放弃加载该库到进程空间。
37.一种在程序调用至少一个库的操作中防止软件冲突的方法,其中按照调用次序将该至少一个库分为M层,每一层具有至少一个库,M≥1,包括步骤:
(a)当执行所述程序的二进制可执行代码时,监控所述程序的二进制可执行代码的调用序列的当前运行的一段可执行代码,该调用序列调用所述M层中的至少一个库中的库函数;
(b)如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;以及
(c)当该调用序列再次调用该库的一个函数时,如果保存有与该库相应的冲突信息,则放弃加载该库,否则,加载该库。
38.一种在程序调用至少一个库的操作中防止软件冲突的系统,其中按照调用次序将该至少一个库分为M层,每一层具有至少一个库,M≥1,包括:
一嗅探模块,当执行所述程序的二进制可执行代码时,监控所述程序的二进制可执行代码的调用序列的当前运行的一段可执行代码,该调用序列调用所述M层中的至少一个库中的库函数;
一冲突信息知识保存模块,如果在所述调用序列调用库函数的过程中发现所述调用序列崩溃,则保存关于该崩溃的冲突信息;和
一库加载模块,当该调用序列再次调用该库的一个函数时,如果保存有与该库相应的冲突信息,则放弃加载该库,否则,加载该库。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200510137085.9A CN100492301C (zh) | 2005-12-23 | 2005-12-23 | 避免软件冲突的方法和系统 |
US11/615,898 US8141059B2 (en) | 2005-12-23 | 2006-12-22 | Method and system for avoidance of software conflict |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200510137085.9A CN100492301C (zh) | 2005-12-23 | 2005-12-23 | 避免软件冲突的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1987797A CN1987797A (zh) | 2007-06-27 |
CN100492301C true CN100492301C (zh) | 2009-05-27 |
Family
ID=38184602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200510137085.9A Expired - Fee Related CN100492301C (zh) | 2005-12-23 | 2005-12-23 | 避免软件冲突的方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8141059B2 (zh) |
CN (1) | CN100492301C (zh) |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8332939B2 (en) * | 2007-02-21 | 2012-12-11 | International Business Machines Corporation | System and method for the automatic identification of subject-executed code and subject-granted access rights |
US8230477B2 (en) * | 2007-02-21 | 2012-07-24 | International Business Machines Corporation | System and method for the automatic evaluation of existing security policies and automatic creation of new security policies |
US8423963B2 (en) * | 2009-03-12 | 2013-04-16 | International Buysiness Machines Corporation | Computer implemented API management mechanism for generating upgrade risk level handling |
KR101636521B1 (ko) * | 2010-03-26 | 2016-07-06 | 삼성전자주식회사 | 코드 오버레이 생성 장치 및 방법 |
US20120192155A1 (en) * | 2011-01-20 | 2012-07-26 | Microsoft Corporation | Code advisor for web compatibility and interoperability |
GB2506596A (en) * | 2012-10-02 | 2014-04-09 | Ibm | Managing a set of software modules in a runtime environment |
CN102999354B (zh) * | 2012-11-15 | 2015-12-02 | 北京奇虎科技有限公司 | 文件加载方法和装置 |
CN103019765B (zh) * | 2012-11-15 | 2016-08-03 | 北京奇虎科技有限公司 | 一种文件重定向方法、装置和计算机系统 |
CN102981874B (zh) * | 2012-11-15 | 2015-12-02 | 北京奇虎科技有限公司 | 计算机处理系统和注册表重定向方法 |
US9323502B2 (en) | 2013-03-15 | 2016-04-26 | Nvidia Corporation | System, method, and computer program product for altering a line of code |
US20140278328A1 (en) | 2013-03-15 | 2014-09-18 | Nvidia Corporation | System, method, and computer program product for constructing a data flow and identifying a construct |
US9015643B2 (en) * | 2013-03-15 | 2015-04-21 | Nvidia Corporation | System, method, and computer program product for applying a callback function to data values |
US9021408B2 (en) | 2013-04-10 | 2015-04-28 | Nvidia Corporation | System, method, and computer program product for translating a source database into a common hardware database |
US9015646B2 (en) | 2013-04-10 | 2015-04-21 | Nvidia Corporation | System, method, and computer program product for translating a hardware language into a source database |
US9171115B2 (en) | 2013-04-10 | 2015-10-27 | Nvidia Corporation | System, method, and computer program product for translating a common hardware database into a logic code model |
US9513671B2 (en) | 2014-08-01 | 2016-12-06 | Microsoft Technology Licensing, Llc | Peripheral retention device |
US10191986B2 (en) | 2014-08-11 | 2019-01-29 | Microsoft Technology Licensing, Llc | Web resource compatibility with web applications |
US9705637B2 (en) | 2014-08-19 | 2017-07-11 | Microsoft Technology Licensing, Llc | Guard band utilization for wireless data communication |
US9397723B2 (en) | 2014-08-26 | 2016-07-19 | Microsoft Technology Licensing, Llc | Spread spectrum wireless over non-contiguous channels |
US9424048B2 (en) | 2014-09-15 | 2016-08-23 | Microsoft Technology Licensing, Llc | Inductive peripheral retention device |
US9946536B2 (en) * | 2015-12-03 | 2018-04-17 | International Business Machines Corporation | Automatic refactoring of javascript code for multi-thread execution |
US10409707B2 (en) * | 2016-09-16 | 2019-09-10 | Facebook, Inc. | Methods and systems for analyzing annotated programming code |
CN110083471A (zh) * | 2018-01-25 | 2019-08-02 | 北京京东尚科信息技术有限公司 | 一种防止应用程序崩溃的方法和装置 |
CN108334334B (zh) * | 2018-03-07 | 2022-02-01 | 政采云有限公司 | 一种管理依赖包版本的方法和系统 |
US11036751B2 (en) * | 2018-05-07 | 2021-06-15 | Servicenow, Inc. | Advanced insights explorer |
CN108920381A (zh) * | 2018-07-27 | 2018-11-30 | 广东浪潮大数据研究有限公司 | 一种nfs操作字性能测试的方法、系统及设备 |
CN110825377A (zh) * | 2018-08-07 | 2020-02-21 | 北京国双科技有限公司 | 一种依赖冲突分析方法及装置 |
CN109918895B (zh) * | 2019-03-07 | 2023-07-14 | 上海掌门科技有限公司 | 用于输出数据的方法、电子设备和计算机可读介质 |
CN112084013B (zh) * | 2019-06-13 | 2024-04-05 | 武汉杰开科技有限公司 | 一种程序调用方法、芯片及计算机存储介质 |
US11294694B2 (en) | 2019-07-23 | 2022-04-05 | Palantir Technologies Inc. | Systems and methods for running applications associated with browser-based user interfaces within multi-developer computing platforms |
CN110457154B (zh) * | 2019-07-25 | 2023-12-22 | Oppo广东移动通信有限公司 | 异常服务处理方法及装置、存储介质、通信终端 |
US11422917B2 (en) * | 2019-07-26 | 2022-08-23 | Red Hat, Inc. | Deriving software application dependency trees for white-box testing |
CN110543423B (zh) * | 2019-09-05 | 2022-12-30 | 中国人民解放军国防科技大学 | 一种软件依赖包能力检测方法、系统及介质 |
US11392373B1 (en) * | 2019-12-10 | 2022-07-19 | Cerner Innovation, Inc. | System and methods for code base transformations |
CN111143790B (zh) * | 2019-12-13 | 2022-07-12 | 广州方硅信息技术有限公司 | 代码混淆方法、装置、设备及存储介质 |
US10909109B1 (en) | 2019-12-30 | 2021-02-02 | Atlassi An Pty Ltd. | Quality control test transactions for shared databases of a collaboration tool |
US11138094B2 (en) | 2020-01-10 | 2021-10-05 | International Business Machines Corporation | Creation of minimal working examples and environments for troubleshooting code issues |
CN111338651B (zh) * | 2020-02-19 | 2023-04-21 | 北京字节跳动网络技术有限公司 | 下载资源提供方法及装置、资源下载方法及装置 |
US11392766B2 (en) * | 2020-02-26 | 2022-07-19 | Cyberark Software Ltd. | Understanding and mediating among diversely structured operational policies |
US11263317B2 (en) | 2020-02-26 | 2022-03-01 | Cyberark Software Ltd. | Understanding and mediating among diversely structured operational policies |
CN113377660B (zh) * | 2021-06-23 | 2024-05-14 | 北京百度网讯科技有限公司 | 测试方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6397378B1 (en) | 1998-08-21 | 2002-05-28 | National Instruments Corporation | Test executive system and method including distributed type storage and conflict resolution |
US6957419B2 (en) * | 2002-03-15 | 2005-10-18 | International Business Machines Corporation | Facilitating the use of aliases during the debugging of applications |
US20050010895A1 (en) * | 2003-07-09 | 2005-01-13 | Mr. Parama Reddappagari | Software Specification Processing System |
US7685573B2 (en) * | 2003-07-31 | 2010-03-23 | Sun Microsystems, Inc. | Flexible error trace mechanism |
-
2005
- 2005-12-23 CN CN200510137085.9A patent/CN100492301C/zh not_active Expired - Fee Related
-
2006
- 2006-12-22 US US11/615,898 patent/US8141059B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US8141059B2 (en) | 2012-03-20 |
CN1987797A (zh) | 2007-06-27 |
US20070180441A1 (en) | 2007-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100492301C (zh) | 避免软件冲突的方法和系统 | |
EP1224543B1 (en) | Fixing applications that are incompatible to the operating system by providing stubs for apis | |
US6681391B1 (en) | Method and system for installing software on a computer system | |
US7962832B2 (en) | Method for detecting memory error | |
AU2018310287A1 (en) | Smart contract processing method and apparatus | |
US8352925B2 (en) | Mechanism for enabling a set of code intended for a first platform to be executed on a second platform | |
US8112745B2 (en) | Apparatus and method for capabilities verification and restriction of managed applications in an execution environment | |
US9213562B2 (en) | Garbage collection safepoint system using non-blocking asynchronous I/O call to copy data when the garbage collection safepoint is not in progress or is completed | |
EP1645959A2 (en) | Grouping of run-time components in entity domains | |
US7552422B2 (en) | Test case inheritance controlled via attributes | |
US7028293B2 (en) | Constant return optimization transforming indirect calls to data fetches | |
CN109960597B (zh) | 一种应用层接口的动态注册方法及相关装置 | |
US8140598B2 (en) | Creating references in a scoped memory system | |
US20100050174A1 (en) | Heap organization for a multitasking virtual machine | |
US20080172656A1 (en) | Processing engine for enabling a set of code intended for a first platform to be executed on a second platform | |
CN110334031B (zh) | 内存分配代码检测方法、装置、计算机设备及存储介质 | |
US9898268B2 (en) | Enhanced local commoning | |
US11593474B2 (en) | Container behavior representation | |
CN103365931B (zh) | 性能分析工具中快速定位函数性能记录的方法及装置 | |
KR101827143B1 (ko) | 객체의 바이너리 호환성을 유지하는 컴퓨팅 장치 및 방법 | |
US7082376B1 (en) | State full test method executor | |
US7690007B2 (en) | Mapping of dynamic link libraries in a computing device | |
CA2875046A1 (en) | Efficient compilation system and method for virtual function table creation | |
CN115827364A (zh) | 安卓平台中Native内存监控方法 | |
Painchaud et al. | On the implementation of a stand-alone Java/sup TM/bytecode verifier |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090527 Termination date: 20201223 |