避免软件冲突的方法和系统技术方案

技术编号:2919353 阅读:1158 留言:0更新日期:2012-04-11 18:40
本发明专利技术的目的是提供一种防止软件冲突的方法/系统,将库划分为第1层到第M层,M≥1。所述方法包括:(a)在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数;(b)如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;以及(c)当该程序调用所述由其直接调用的库时,如果保存有与其相应的冲突信息,则放弃加载该库,否则,加载该库。

【技术实现步骤摘要】

本专利技术涉及避免软件冲突,具体地说,涉及避免软件冲突的方法和系统
技术介绍
就终端用户操作计算机的经历而言,软件冲突是一个严重的问题。当发生软件冲突时,应用将报告错误或者不能完成一些有用的功能。更加糟糕的是一些软件冲突不仅禁用当前应用,而且使计算机系统崩溃,由此终端用户必须重新启动计算机。软件冲突的原因主要有如下两方面(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 RESOLUTION”)。方法(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层到第M层,每一层具有至少一个库,M≥1,包括步骤:(a)在执行一程序前,预扫描该程序的二进制可执行代码的调用方函数和 属于所述第1层的各个库的、由所述程序的二进制可执行代码的调用方函数分别调用的被调用方函数,如果M>1,则还预扫描属于所述第1层到第M-1层的各个库的调用方函数和属于第2层到第M层的各个库的、由所述属于第1层到第M-1层的各个库的调用方函数分别调用的被调用方函数,以便判断在上述调用方函数和相应的被调用方函数之间是否分别存在冲突;(b)如果存在所述至少一个冲突,则保存至少一个分别指示该至少一个冲突的冲突信息;以及(c)当在运行的所述程序的调用序列中出现所述调用方函 数调用相应的被调用方函数时,如果保存有指示该调用冲突的冲突信息,则放弃加载该被调用方函数的库,否则,加载该库。

【技术特征摘要】

【专利技术属性】
技术研发人员:过晓冰丁勇王哲鹏苏辉赵石顽
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1