CN103942131A - 监控底层接口是否变化的方法及装置 - Google Patents
监控底层接口是否变化的方法及装置 Download PDFInfo
- Publication number
- CN103942131A CN103942131A CN201310024949.0A CN201310024949A CN103942131A CN 103942131 A CN103942131 A CN 103942131A CN 201310024949 A CN201310024949 A CN 201310024949A CN 103942131 A CN103942131 A CN 103942131A
- Authority
- CN
- China
- Prior art keywords
- version
- function
- interface
- overload
- physical layer
- 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
Abstract
本发明涉及监控底层接口是否变化的方法及装置,其中监控底层接口是否变化的方法包括步骤:获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数;判断第一版本与第二版本所有对应接口的函数是否相同;以及若第一版本与第二版本所有对应接口的函数相同,则判断为第一版本与第二版本的底层接口相同,若第一版本与第二版本所有对应接口的函数不相同,则判断为第一版本与第二版本的底层接口不相同。本发明可以快速、有效地检测出底层接口的变化。
Description
技术领域
本发明涉及底层接口监控技术领域,特别涉及监控底层接口是否变化的方法及装置。
背景技术
目前,主流的系统架构,例如软件架构等,大都采用分层架构,它会将一些通用的和相对独立的功能封装成接口,并以动态链接库(DynamicLink Library,Dll)的方式提供。这些提供接口的动态链接库就组成了底层。而上层要使用这些功能的时候,就需要加载这些动态链接库以使用这些动态链接库提供的接口。随着时间的发展,底层接口也随着时间和软件功能的变化而变化(例如底层接口的第二版本相对于底层接口的第一版本有变化),而这样的变化会影响上层的功能和使用,这些变化对于上层来说是十分重要的。因此,监控底层接口的这种变化并告知上层使用者是十分必要的。
现有的监控底层接口变化的方法是通过扫描源代码的方式。即需要将源代码文件拉到本地,使用微软提供的DTE接口,对源代码文件进行逐个的扫描,通过关键字识别源代码的二进制文件的底层的接口,然后对底层的接口进行比较以监控底层接口是否变化。但是,使用源代码监控底层接口是否变化的方法主要有以下问题:一方面,需要拉取源代码到本地进行源代码的比较,这就需要源代码的权限,而源代码的权限是比较敏感的资源,获取过程比较复杂。另一方面,需要扫描全部源代码以进行接口的比较,而现在大多数产品的源代码量是比较大的,因此进行源代码比较这个过程是非常耗时的。而且,为了解决耗时问题,会采取分布式的方法进行,但部署成分布式又增加了实现的难度。
发明内容
因此,本发明提供监控底层接口是否变化的方法及装置,以快速、有效地检测出底层接口的变化。
具体地,本发明实施例提供的一种监控底层接口是否变化的方法,其包括步骤:获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数;判断第一版本与第二版本所有对应接口的函数是否相同;以及若第一版本与第二版本所有对应接口的函数相同,则判断为第一版本与第二版本的底层接口相同,若第一版本与第二版本所有对应接口的函数不相同,则判断为第一版本与第二版本的底层接口不相同。
另外,本发明实施例提供的一种监控底层接口是否变化的装置,其包括:获取单元、判断单元以及监控单元,其中,获取单元,用于获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数;判断单元,用于判断第一版本与第二版本所有对应接口的函数是否相同;监控单元,用于在第一版本与第二版本所有对应接口的函数相同,则判断为第一版本与第二版本的底层接口相同,若第一版本与第二版本所有对应接口的函数不相同,则判断为第一版本与第二版本的底层接口不相同。
由上述实施例可知,本发明通过判断第一版本与第二版本所有对应接口的函数是否相同,若相同,则判断为第一版本与第二版本的底层接口相同,若不相同,则判断为第一版本与第二版本的底层接口不相同。因本发明通过判断所有对应接口的函数是否变化而监控底层接口是否变化。从而相较现有技术的源代码比较方式,本发明可以快速、有效地检测出底层接口的变化。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1是本发明实施例提供的监控底层接口是否变化的方法的步骤流程图;
图2是本发明另一实施例提供的监控底层接口是否变化的方法的步骤流程图;
图3是本发明实施例提供的获取Com接口、Com接口的成员函数、成员函数的返回值、函数名和参数的方法的步骤流程图;
图4是本发明实施例提供的获取动态链接库接口的导出函数、导出函数的返回值、函数名和参数的方法的步骤流程图;
图5是本发明实施例监控底层接口是否变化的装置的主要架构框图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的监控底层接口是否变化的方法及装置其具体实施方式、结构、特征及功效,详细说明如后。
有关本发明的前述及其他技术内容、特点及功效,在以下配合参考图式的较佳实施例详细说明中将可清楚的呈现。通过具体实施方式的说明,当可对本发明为达成预定目的所采取的技术手段及功效得以更加深入且具体的了解,然而所附图式仅是提供参考与说明之用,并非用来对本发明加以限制。
图1是本发明实施例提供的监控底层接口是否变化的方法的步骤流程图。请参阅图1,本发明实施例的监控底层接口是否变化的方法可包括以下步骤S101-S107:
步骤S101,获取底层接口的第一版本与第二版本的所有动态链接库(Dynamic Link Library,Dll),获取所有动态链接库的所有接口以及所有接口的函数。
本步骤中,此接口可以包括动态链接库接口或Com接口。若动态链接库符合Com(Component Object Model,组件对象模型)规范,则接口可以包括Com接口,而函数则可以为动态链接库接口的导出函数和Com接口的成员函数。
步骤S103,判断第一版本与第二版本所有对应接口的函数是否相同,若相同,则进行步骤S105,若不相同,则进行步骤S107。
本步骤中,若接口为Com接口,则函数即为Com接口的成员函数,若接口为动态链接库接口,则函数即为动态链接库接口的导出函数。判断第一版本与第二版本所有对应接口的函数是否相同即依次判断第一版本与第二版本所有对应接口的函数的函数名、函数的返回值和函数参数是否相同。
步骤S105,判断为第一版本与第二版本的底层接口相同。
本步骤中,第一版本与第二版本的底层接口相同即第二版本的底层接口相较于第一版本的底层接口无变化,或者第一版本的底层接口相较于第二版本的底层接口无变化。
步骤S107,判断为第一版本与第二版本的底层接口不相同。
本步骤中,第一版本与第二版本的底层接口不相同即第二版本的底层接口相较于第一版本的底层接口有变化,或者第一版本的底层接口相较于第二版本的底层接口有变化。
在本发明的实施例中,本发明通过判断第一版本与第二版本所有对应接口的函数是否相同,若相同,则判断为第一版本与第二版本的底层接口相同,若不相同,则判断为第一版本与第二版本的底层接口不相同。因本发明通过判断所有对应接口的函数是否变化而监控底层接口是否变化。从而相较现有技术的源代码比较方式,本发明可以快速、有效地检测出底层接口的变化。
图2是本发明实施例提供的监控底层接口是否变化的方法的步骤流程图。图2是在图1的基础上改进而来的。请参阅图2,本发明实施例的监控底层接口是否变化的方法可包括以下步骤S200-S217:
步骤S200,获取底层接口的第一版本与第二版本的所有动态链接库(Dynamic Link Library,Dll),获取所有动态链接库的所有接口以及所有接口的函数。
本步骤中,此接口可以包括动态链接库接口或Com接口。若动态链接库符合Com规范,则接口可以包括Com(Component Object Model,组件对象模型)接口,而函数则可以为动态链接库接口的导出函数和Com接口的成员函数。其中,获取Com接口可以通过微软提供的DIA(Debug InterfaceAccess,调试界面访问)接口读取PDB(program database,程序数据库)中的符号信息再加以判断而获取的(如图3)。而对于动态链接库接口的获取,可以通过扫描动态链接库文件,分析PE(Portable Execute,可执行)文件的结构,提取导出表信息而获得(如图4)。
步骤S201,判断第一版本的所有接口与第二版本的所有接口中是否有相同名称的接口,若是,则进行步骤S203,若否,则进行步骤S202。
本步骤中,接口可以为Com接口、动态链接库接口。本实施方式中,第一版本与第二版本中的相同名称的接口即为第一版本与第二版本中的对应的接口。
步骤S202,记录第一版本的所有接口与第二版本的所有接口之间的差异。
本步骤中,下面以动态链接库A.Dll(动态链接库)的Com接口的比较为例说明进行接口比较的流程,其中动态链接库A1是A.Dll(动态链接库)的第二版本,而动态链接库A2是A.Dll(动态链接库)的第一版本。而动态链接库A1的Com接口的UDT(User Defined Type,用户定义类型)调试符号集合为N={a11,a12,a13…a1n},动态链接库A2的Com接口的UDT调试符号集合为M={a21,a22,a23…a2n}。对于Com接口的比较,首先是进行Com接口的比较,然后进行Com接口的成员函数的比较。由于每个Com接口都有一个UDT调试符号,因此对于Com接口的比较可以通过比较第一版本和第二版本Com接口的UDT调试符号集合中的元素(例如集合M中的元素a11,a12,a13…a1n,和集合N中的元素a21,a22,a23…a2n)是否相同以进行Com接口的比较。即对于M中的每一个元素,在N中寻找是否有和这个元素名字相同的元素,如果有,则再进行成员函数的比较。若无,则记录两者之间的差异。然后从M、N中删除这个已经比较过的相同名字的元素。这样最后剩下的就是存在于N中但不存在于M中的接口,以及不存在于N但存在于M中的接口。对于存在于N中但不存在于M中的接口,若定义和动态链接库A2相比较,则为动态链接库A1的新增接口;对于不存在于N中但存在于M中的接口,若定义为和动态链接库A2相比较,则为动态链接库A1删除的接口。对于成员函数的比较,其比较过程的原理和接口的比较类似。也是列出两个版本需要比较的成员函数的集合。对于两个集合名字相同的成员函数,进行函数的返回值和参数的比较,记录差异并从集合中删除两个已经比较过的成员函数。最后剩下的就是和动态链接库A2相比较,动态链接库A1中的某Com接口新增和删除的成员函数。它和Com接口的比较有一个不同的地方在于函数的比较要处理重载函数的比较。
步骤S201后具体还可包括步骤:
步骤S203,判断第一版本与第二版本的所有相同名称的接口中是否有相同名称的函数,若判断为是,则进行步骤S206,若判断为否,则进行步骤S205。
本步骤中,若接口为Com接口,则函数即为Com接口的成员函数,若接口为动态链接库接口,则函数即为动态链接库接口的导出函数。
步骤S205,记录第一版本与第二版本的相同名称的接口的函数之间的差异。
步骤S206,判断第一版本与第二版本的此相同名称的函数是否是重载函数,若否,则进行步骤S209,若是,则进行步骤S215。
本步骤中,第一版本与第二版本的此相同名称的函数即第一版本与第二版本的对应接口的相同名称的函数。重载函数即两个或者两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同。比如在动态链接库A1中有3个函数名为XXX的函数X11,X12,X13,而在动态链接库A2中也有两个函数名为XXX的函数X21,X22,则函数X11,X12,X13,X21,X22为重载函数。
步骤S209,比较第一版本与第二版本的相同名称的函数的返回值和参数是否相同,若是,则进行步骤S211,若否,则进行步骤S213。
本步骤中,参数包括参数个数、参数类型等。
步骤S211,判断为第一版本与第二版本的相同名称的函数为相同的函数。
步骤S213,记录函数之间的差异。
步骤S215,确定第二版本中哪个重载函数与第一版本的相同名称的重载函数进行比较。
本步骤中,假设在第一版本的动态链接库A1中有3个函数名为XXX的重载函数X11,X12,X13,而在第二版本动态链接库A2中也有两个函数名为XXX的重载函数X21,X22,那么这里需要进行定位函数X11究竟是和函数X21、X22中的哪个函数进行比较,X12究竟是和函数X21、X22中的哪个函数进行比较,以及X13究竟是和函数X21、X22中的哪个函数进行比较。即寻找差别最小,即最相似的两个函数进行差异化的比较。若进行比较的两个函数的返回值或者单个参数(例如参数个数、参数类型)不一样,就算一个差别。然后按照以下方法计算差别(即计算出返回值的差别值、参数个数的差别值、参数类型的差别值等),与重载函数X11、X12、X13差别最小的第二版本的那个重载函数则分别定义为与函数X11、X12、X13最相似的函数。将第一版本的重载函数X11、X12、X13分别与第二版本的所有重载函数(X21、X22)进行比较,以函数X11为例进行说明:
(1)若函数X11(第一版本的重载函数)与第二版本的某个重载函数(例如函数X21)的参数个数相同时,计算函数X11与第二版本的此重载函数的返回值和参数类型的第一差别值a,并找出第一差别值最小的第二版本中的那个函数(如果a值是0的话,就是没差别,则认为与函数X11差别最小的函数即为与函数X11最相似的函数)。举例说明,若函数X11与第二版本的函数X21的参数个数相同,函数X11的返回值与函数X21的返回值也相同,而函数X11有三个参数的类型与函数X21不同,则第一差别值a=3。
(2)若函数X11与第二版本的某个重载函数(例如函数X22)的参数个数不同时,计算函数X11与第二版本的此重载函数的参数个数的第二差别值b,并找出第二差别值最小的第二版本中的那个函数。举例说明,若函数X11与第二版本的函数X22的参数个数不同,函数X11的参数个数为两个,而函数X22的参数个数为一个,则第二差别值b=2。
(3)第二差别值b<第一差别值a时,则取最小b值对应的第二版本中的那个函数,否则,第二差别值b大于等于第一差别值a时,则取最小a值对应的第二版本中的那个函数作为与函数X11差别最小的函数即为与函数X11最相似的函数。
若经过计算,发现函数X11和X22的差别最小,则对这两个函数X11和X22进行差异化的比较,并记录比较结果,然后从比较集合中删除这两个函数X11和X22。再对X12、X13从第二版本的重载函数中寻找差别最小的函数并将两者进行比较,若两者相同,则从第一版本的重载函数和第二版本的重载函数中分别删除这个已经比较过的相同的函数,直到将某个比较集合中的函数(即第一版本的重载函数或第二版本的重载函数)全部比较完。剩下的就是新增或者删除的函数。
由以上可以总结得出步骤S215中具体还可包括步骤:若第一版本与第二版本的相同名称的函数是重载函数,则依次将第一版本需比较的重载函数的参数个数与第二版本的所有重载函数的参数个数进行比较,若第一版本需比较的重载函数的参数个数与第二版本的一些重载函数的参数个数相同,则计算第二版本与第一版本的参数个数相同的重载函数的返回值和参数类型的第一差别值,并找出第一差别值最小的第二版本中的那个重载函数;若第一版本需比较的重载函数的参数个数与第二版本的一些重载函数的参数个数不相同,则计算第二版本与第一版本的参数个数不相同的重载函数的参数个数的第二差别值,并找出第二差别值最小的第二版本中的那个重载函数;以及根据第一差别值最小的第二版本中的重载函数与第二差别值最小的第二版本的重载函数,以确定第二版本中差别值最小的那个重载函数与第一版本的需比较的重载函数进行比较。
步骤S217,比较第二版本中所确定的函数与第一版本的相同名称的函数的返回值和参数是否相同,若是,则进行步骤S211,若否,则进行步骤S213。
在本发明的实施例中,本发明通过判断第一版本的所有接口与第二版本的所有接口中是否有相同名称的接口,再判断第一版本与第二版本此相同名称的接口的函数的返回值、函数名和参数是否相同,若相同,则判断为第一版本与第二版本所有对应接口的函数相同,若不同,则判断为第一版本与第二版本所有对应接口的函数不相同。还判断第一版本与第二版本的相同名称的函数是否是重载函数,若是,则再确定第二版本中哪个重载函数与第一版本的相同名称的重载函数进行比较,以确定重载函数是否变化。因本发明通过判断接口、接口的函数、函数名和参数是否变化而监控底层接口是否变化。从而相较现有技术的源代码比较方式,本发明可以快速、有效地检测出底层接口的变化。
图3是本发明实施例提供的获取Com接口、Com接口的成员函数、成员函数的返回值、函数名和参数的方法的步骤流程图。请参阅图3,本发明实施例的获取Com接口、Com接口的成员函数、成员函数的返回值、函数名和参数的方法可包括以下步骤S301-S309:
步骤S301:获取各个动态链接库对应的PDB。
本步骤中,可以通过存放PDB的服务器上查找到动态链接库对应的PDB。PDB中保存着调试符号信息、项目状态信息等。
步骤S303:获取各个PDB中的所有类型为UDT(User Defined Type,用户定义类型)的调试符号信息。
本步骤中,获取PDB中的类型为UDT的调试符号信息可以通过DIA接口进行。调试符号是编译程序在使用源代码产生可执行程序过程中,为支持调试而摘取的调试信息。它用于将二进制信息和源代码信息联系起来。类型为UDT的调试符号信息中记录了变量信息(变量的名称、类型、地址、长度等)、函数等信息。
步骤S305:判断每个类型为UDT的调试符号信息是否为Com接口的调试符号信息。若是,则进行S307。若否,则继续进行步骤S305。
本步骤中,Com接口的判断是从Com接口的定义出发,包括从以下几个方面进行判断:(1)最根部的基类是IUnknown。(2)只有成员函数而没有成员变量。(3)成员函数全部为虚函数。(4)返回值是HRESULT。(5)调用约定为__std call。在类型为UDT的调试符号信息中,若一个类型为UDT的调试符号信息满足以上5个条件,则判断为此类型为UDT的调试符号信息是Com接口的调试符号信息,若不满足以上5个条件,则判断为此类型为UDT的调试符号信息不是Com接口的调试符号信息。
步骤S307:获取Com接口的成员函数的符号信息,从而获取Com接口的成员函数的返回值、函数名和参数。
本步骤中,成员函数的符号信息包括成员函数的返回值、函数名、参数等信息。获取成员函数的返回值、函数名和参数都是通过DIA提供的接口进行的。
在本发明的实施例中,本发明通过获取PDB中的所有类型为UDT的调试符号信息,判断每个类型为UDT的调试符号信息是否为Com接口的调试符号信息,获取Com接口的成员函数的符号信息,这样,可以快速获取Com接口的成员函数信息,以便于实现对Com接口是否变化的监控。
图4是本发明实施例提供的获取动态链接库接口的导出函数、导出函数的返回值、函数名和参数的方法的步骤流程图。请参阅图4,本发明实施例的获取动态链接库接口的导出函数、导出函数的返回值、函数名和参数的方法可包括以下步骤S401-S405:
步骤S401:获取导出符号表。
本步骤中,可以从PE文件中获取导出符号表。
步骤S403:从导出符号表中获取各动态链接库接口的导出函数。
本步骤中,导出函数通常存放于导出符号表中。导出函数即为动态链接库接口的导出接口。
步骤S405,获取各导出函数的返回值、函数名和参数。
在本发明的实施例中,本发明通过从导出符号表中获取各动态链接库接口的导出函数,再获取各导出函数的返回值、函数名和参数,这样,可以快速获取各导出函数信息,以便于实现对各导出函数是否变化的监控。
图5为本发明实施例提供的监控底层接口是否变化的装置的主要架构框图。请参阅图5,本发明实施例提供的监控底层接口是否变化的装置包括:获取单元500、判断单元501以及监控单元503。
获取单元500,用于获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数。
判断单元501,用于判断判断第一版本与第二版本所有对应接口的函数是否相同。
监控单元503,用于在第一版本与第二版本所有对应接口的函数相同,则判断为第一版本与第二版本的底层接口相同,若第一版本与第二版本所有对应接口的函数不相同,则判断为第一版本与第二版本的底层接口不相同。
此外,判断单元501,还用于判断第一版本的所有接口与第二版本的所有接口中是否有相同名称的接口;若有相同名称的接口,则通过判断第一版本与第二版本所有相同名称的接口的函数是否相同以获得第一版本与第二版本所有对应接口的函数是否相同。
此外,判断单元501,还用于判断第一版本与第二版本的所有对应接口的相同名称的函数是否是重载函数;若是重载函数,则确定第二版本中哪个重载函数与第一版本的相同名称的重载函数进行比较。
此外,判断单元501,还用于比较第二版本中所确定的重载函数与第一版本的相同名称的重载函数的返回值和参数是否相同;若相同,则判断判断第二版本中所确定的重载函数与第一版本的相同名称的重载函数为相同的函数。
此外,判断单元501,还用于判断若第一版本与第二版本的相同名称的函数是重载函数,则依次将第一版本需比较的重载函数的参数个数与第二版本的所有重载函数的参数个数进行比较,若第一版本需比较的重载函数的参数个数与第二版本的一些重载函数的参数个数相同,则计算第二版本与第一版本的参数个数相同的重载函数的返回值和参数类型的第一差别值,并找出第一差别值最小的第二版本中的那个重载函数;若第一版本需比较的重载函数的参数个数与第二版本的一些重载函数的参数个数不相同,则计算第二版本与第一版本的参数个数不相同的重载函数的参数个数的第二差别值,并找出第二差别值最小的第二版本中的那个重载函数;以及根据第一差别值最小的第二版本中的重载函数与第二差别值最小的第二版本的重载函数,以确定第二版本中差别值最小的那个重载函数与第一版本的需比较的重载函数进行比较。
此外,获取单元500,还用于获取动态链接库对应的PDB;获取PDB中的所有类型为UDT的调试符号信息;判断每个类型为UDT的调试符号信息是否为Com接口的调试符号信息;若是Com接口的调试符号信息,则获取Com接口的成员函数的符号信息,以获取Com接口的成员函数的返回值、函数名和参数。
此外,获取单元500,还用于获取导出符号表;从导出符号表中获取各动态链接库接口的导出函数、各导出函数的返回值、函数名和参数。
关于本发明提供的监控底层接口是否变化的装置的详细的工作流程,请参阅上文针对监控底层接口是否变化的方法的描述,此处不再赘述。
在本发明的实施例中,本发明通过判断第一版本的所有接口与第二版本的所有接口中是否有相同名称的接口,再判断第一版本与第二版本的此相同名称的接口函数是否相同,若相同,则判断为底层接口无变化,若不同,则判断为底层接口有变化。还判断第一版本与第二版本的相同名称的函数是否是重载函数,若是,则再确定第二版本中哪个重载函数与第一版本的相同名称的重载函数进行比较,以确定重载函数是否变化。因本发明通过判断接口、接口的函数、函数名和参数是否变化而监控底层接口是否变化。从而相较现有技术的源代码比较方式,本发明可以快速、有效地检测出底层接口的变化。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (14)
1.一种监控底层接口是否变化的方法,其特征在于,该监控底层接口是否变化的方法包括步骤:
获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数;
判断该第一版本与该第二版本所有对应接口的函数是否相同;以及
若该第一版本与该第二版本所有对应接口的函数相同,则判断为该第一版本与该第二版本的底层接口相同,若该第一版本与该第二版本所有对应接口的函数不相同,则判断为该第一版本与该第二版本的底层接口不相同。
2.如权利要求1所述的监控底层接口是否变化的方法,其特征在于,在执行判断该第一版本与该第二版本所有对应接口的函数是否相同的步骤中,还包括步骤:
判断该第一版本的所有接口与该第二版本的所有接口中是否有相同名称的接口;
若有相同名称的接口,则通过判断该第一版本与该第二版本所有相同名称的接口的函数是否相同以获得该第一版本与该第二版本所有对应接口的函数是否相同。
3.如权利要求1所述的监控底层接口是否变化的方法,其特征在于,在执行判断该第一版本与该第二版本所有对应接口的函数是否相同的步骤中,还包括步骤:
判断该第一版本与该第二版本的所有对应接口的相同名称的函数是否是重载函数;
若是重载函数,则确定该第二版本中哪个重载函数与该第一版本的相同名称的重载函数进行比较。
4.如权利要求3所述的监控底层接口是否变化的方法,其特征在于,还包括步骤:
比较该第二版本中所确定的重载函数与该第一版本的相同名称的重载函数的返回值和参数是否相同;
若相同,则判断该第二版本中所确定的重载函数与该第一版本的相同名称的重载函数为相同的函数。
5.如权利要求3所述的监控底层接口是否变化的方法,其特征在于,还包括步骤:
若该第一版本与该第二版本的该相同名称的函数是重载函数,则依次将该第一版本需比较的重载函数的参数个数与该第二版本的所有重载函数的参数个数进行比较,若该第一版本需比较的重载函数的参数个数与该第二版本的一些重载函数的参数个数相同,则计算该第二版本与该第一版本的参数个数相同的重载函数的返回值和参数类型的第一差别值,并找出该第一差别值最小的该第二版本中的那个重载函数;
若该第一版本需比较的重载函数的参数个数与该第二版本的一些重载函数的参数个数不相同,则计算该第二版本与该第一版本的参数个数不相同的重载函数的参数个数的第二差别值,并找出该第二差别值最小的该第二版本中的那个重载函数;以及
根据该第一差别值最小的第二版本中的重载函数与该第二差别值最小的第二版本的重载函数,以确定该第二版本中差别值最小的那个重载函数与该第一版本的需比较的重载函数进行比较。
6.如权利要求1所述的监控底层接口是否变化的方法,其特征在于,在执行获取所有动态链接库的所有接口以及所有接口的函数的步骤中,还包括步骤:
获取各个动态链接库对应的PDB;
获取各个PDB中的所有类型为UDT的调试符号信息;
判断每个类型为UDT的调试符号信息是否为Com接口的调试符号信息;
若是Com接口的调试符号信息,则获取Com接口的成员函数的符号信息,以获取Com接口的成员函数的返回值、函数名和参数。
7.如权利要求1所述的监控底层接口是否变化的方法,其特征在于,在执行获取所有动态链接库的所有接口以及所有接口的函数的步骤中,还包括步骤:
获取导出符号表;以及
从该导出符号表中获取各动态链接库接口的导出函数、该各导出函数的返回值、函数名和参数。
8.一种监控底层接口是否变化的装置,其特征在于,该监控底层接口是否变化的装置包括:
获取单元,用于获取底层接口的第一版本与第二版本的所有动态链接库,获取所有动态链接库的所有接口以及所有接口的函数;
判断单元,用于判断判断该第一版本与该第二版本所有对应接口的函数是否相同;以及
监控单元,用于在该第一版本与该第二版本所有对应接口的函数相同时,则判断为该第一版本与该第二版本的底层接口相同,若该第一版本与该第二版本所有对应接口的函数不相同,则判断为该第一版本与该第二版本的底层接口不相同。
9.如权利要求8所述的监控底层接口是否变化的装置,其特征在于,该判断单元,还用于判断该第一版本的所有接口与该第二版本的所有接口中是否有相同名称的接口;若有相同名称的接口,则通过判断该第一版本与该第二版本所有相同名称的接口的函数是否相同以获得该第一版本与该第二版本所有对应接口的函数是否相同。
10.如权利要求8所述的监控底层接口是否变化的装置,其特征在于,该判断单元,还用于判断该第一版本与该第二版本的所有对应接口的相同名称的函数是否是重载函数;若是重载函数,则确定该第二版本中哪个重载函数与该第一版本的相同名称的重载函数进行比较。
11.如权利要求10所述的监控底层接口是否变化的装置,其特征在于,该判断单元,还用于比较该第二版本中所确定的重载函数与该第一版本的相同名称的重载函数的返回值和参数是否相同;若相同,则判断该第二版本中所确定的重载函数与该第一版本的相同名称的重载函数为相同的函数。
12.如权利要求10所述的监控底层接口是否变化的装置,其特征在于,该判断单元,还用于判断若该第一版本与该第二版本的该相同名称的函数是重载函数,则依次将该第一版本需比较的重载函数的参数个数与该第二版本的所有重载函数的参数个数进行比较,若该第一版本需比较的重载函数的参数个数与该第二版本的一些重载函数的参数个数相同,则计算该第二版本与该第一版本的参数个数相同的重载函数的返回值和参数类型的第一差别值,并找出该第一差别值最小的该第二版本中的那个重载函数;若该第一版本需比较的重载函数的参数个数与该第二版本的一些重载函数的参数个数不相同,则计算该第二版本与该第一版本的参数个数不相同的重载函数的参数个数的第二差别值,并找出该第二差别值最小的该第二版本中的那个重载函数;以及根据该第一差别值最小的第二版本中的重载函数与该第二差别值最小的第二版本的重载函数,以确定该第二版本中差别值最小的那个重载函数与该第一版本的需比较的重载函数进行比较。
13.如权利要求8所述的监控底层接口是否变化的装置,其特征在于,该获取单元,还用于获取各个动态链接库对应的PDB;获取各个PDB中的所有类型为UDT的调试符号信息;判断每个类型为UDT的调试符号信息是否为Com接口的调试符号信息;若是Com接口的调试符号信息,则获取Com接口的成员函数的符号信息以获取Com接口的成员函数的返回值、函数名和参数。
14.如权利要求8所述的监控底层接口是否变化的装置,其特征在于,该获取单元,还用于获取导出符号表;以及从该导出符号表中获取各动态链接库接口的导出函数、该各导出函数的返回值、函数名和参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310024949.0A CN103942131B (zh) | 2013-01-23 | 2013-01-23 | 监控底层接口是否变化的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310024949.0A CN103942131B (zh) | 2013-01-23 | 2013-01-23 | 监控底层接口是否变化的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103942131A true CN103942131A (zh) | 2014-07-23 |
CN103942131B CN103942131B (zh) | 2018-07-06 |
Family
ID=51189804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310024949.0A Active CN103942131B (zh) | 2013-01-23 | 2013-01-23 | 监控底层接口是否变化的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103942131B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484579A (zh) * | 2016-10-18 | 2017-03-08 | 广州视源电子科技股份有限公司 | 一种用于转接器的测试方法及装置 |
CN108628728A (zh) * | 2017-03-15 | 2018-10-09 | 华为技术有限公司 | 检测方法和装置 |
CN112800194A (zh) * | 2021-01-15 | 2021-05-14 | 亿企赢网络科技有限公司 | 一种接口变更识别方法、装置、设备及存储介质 |
CN112799691A (zh) * | 2021-02-02 | 2021-05-14 | 百果园技术(新加坡)有限公司 | 一种应用安装包的处理方法、装置、设备及介质 |
CN113703879A (zh) * | 2021-08-31 | 2021-11-26 | 康键信息技术(深圳)有限公司 | 对象重载方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070270980A1 (en) * | 2006-05-19 | 2007-11-22 | Westinghouse Electric Company Llc | Computerized procedures system |
CN101520731A (zh) * | 2008-02-27 | 2009-09-02 | 埃森哲环球服务有限公司 | 图形用户接口应用比较器 |
CN102073520A (zh) * | 2010-12-30 | 2011-05-25 | 中国民航信息网络股份有限公司 | 一种c++应用程序版本动态管理系统和方法 |
CN102253992A (zh) * | 2011-07-06 | 2011-11-23 | 广东威创视讯科技股份有限公司 | 一种基于面向对象的文件差异比较方法及其系统 |
US20120222024A1 (en) * | 2011-02-24 | 2012-08-30 | Kushal Das | Mechanism for Managing Support Criteria-Based Application Binary Interface/Application Programming Interface Differences |
-
2013
- 2013-01-23 CN CN201310024949.0A patent/CN103942131B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070270980A1 (en) * | 2006-05-19 | 2007-11-22 | Westinghouse Electric Company Llc | Computerized procedures system |
CN101520731A (zh) * | 2008-02-27 | 2009-09-02 | 埃森哲环球服务有限公司 | 图形用户接口应用比较器 |
CN102073520A (zh) * | 2010-12-30 | 2011-05-25 | 中国民航信息网络股份有限公司 | 一种c++应用程序版本动态管理系统和方法 |
US20120222024A1 (en) * | 2011-02-24 | 2012-08-30 | Kushal Das | Mechanism for Managing Support Criteria-Based Application Binary Interface/Application Programming Interface Differences |
CN102253992A (zh) * | 2011-07-06 | 2011-11-23 | 广东威创视讯科技股份有限公司 | 一种基于面向对象的文件差异比较方法及其系统 |
Non-Patent Citations (1)
Title |
---|
胖强575693755: "调试程序的简单说明", 《百度文库》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106484579A (zh) * | 2016-10-18 | 2017-03-08 | 广州视源电子科技股份有限公司 | 一种用于转接器的测试方法及装置 |
CN108628728A (zh) * | 2017-03-15 | 2018-10-09 | 华为技术有限公司 | 检测方法和装置 |
CN108628728B (zh) * | 2017-03-15 | 2021-07-16 | 华为技术有限公司 | 检测方法和装置 |
CN112800194A (zh) * | 2021-01-15 | 2021-05-14 | 亿企赢网络科技有限公司 | 一种接口变更识别方法、装置、设备及存储介质 |
CN112800194B (zh) * | 2021-01-15 | 2023-11-17 | 亿企薪福网络科技有限公司 | 一种接口变更识别方法、装置、设备及存储介质 |
CN112799691A (zh) * | 2021-02-02 | 2021-05-14 | 百果园技术(新加坡)有限公司 | 一种应用安装包的处理方法、装置、设备及介质 |
CN113703879A (zh) * | 2021-08-31 | 2021-11-26 | 康键信息技术(深圳)有限公司 | 对象重载方法、装置、设备及存储介质 |
CN113703879B (zh) * | 2021-08-31 | 2023-10-20 | 康键信息技术(深圳)有限公司 | 对象重载方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103942131B (zh) | 2018-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6393805B2 (ja) | カラムナデータベース内のヒストグラムを使用した効率的なクエリー処理 | |
US8694574B2 (en) | Optimized settings in a configuration database with boundaries | |
CN107193750B (zh) | 一种脚本录制方法和装置 | |
US8656134B2 (en) | Optimized memory configuration deployed on executing code | |
US8607018B2 (en) | Memory usage configuration based on observations | |
US8656135B2 (en) | Optimized memory configuration deployed prior to execution | |
US8782635B2 (en) | Reconfiguration of computer system to allow application installation | |
US20140281726A1 (en) | Bottleneck Detector Application Programming Interface | |
US8732587B2 (en) | Systems and methods for displaying trustworthiness classifications for files as visually overlaid icons | |
US9582418B2 (en) | Confirming the sensitivity of a data object in a managed object heap | |
US20150007325A1 (en) | System and Method for Detecting Malicious Software Using Malware Trigger Scenarios | |
US9740505B2 (en) | Accurate static dependency analysis via execution-context type prediction | |
EP3014435A1 (en) | Hook framework | |
CN103942131A (zh) | 监控底层接口是否变化的方法及装置 | |
US20110173594A1 (en) | Selective Loading of Code Elements for Code Analysis | |
US10868741B2 (en) | Anchor shortening across streaming nodes | |
CN103631573A (zh) | 可迁移函数执行时间的获得方法及系统 | |
US20140040874A1 (en) | Implementing multiple versions of a plug-in concurrently | |
CN113495728A (zh) | 依赖关系确定方法、装置、电子设备及介质 | |
EP3635563B1 (en) | Application analysis with flexible post-processing | |
JP6048957B2 (ja) | 情報処理装置、プログラム、及び情報処理方法 | |
US20110321001A1 (en) | Visualization of runtime analysis across dynamic boundaries | |
US20210141769A1 (en) | Moving File Sequences Together Across Multiple Folders | |
CN115687158B (zh) | 一种协议软件的测试方法及装置 | |
WO2017066210A1 (en) | System and method for ip fingerprinting and ip dna analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |