发明内容
本公开实施例提供函数调用方法,装置,电子设备,和计算机可读存储介质,以期解决函数被非法调用的技术问题。
第一方面,本公开实施例提供一种函数调用方法,包括:确定第一执行语句,所述第一执行语句用于调用目标函数;在所述第一执行语句前或所述第一执行语句后增加第二执行语句;在所述目标函数中增加第三执行语句,所述第三执行语句用于:确定所述目标函数的返回地址;响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。
进一步的,所述第三执行语句还用于响应于所述返回地址与所述第二执行语句关联,继续调用所述目标函数。
进一步的,所述确定第一执行语句,包括:根据编译器处理后的表示形式确定所述第一执行语句。
进一步的,所述第二执行语句用于插入特征码。
进一步的,所述特征码是预设特征码;所述返回地址与所述第二执行语句不关联,包括:所述返回地址的预设偏移范围内的字节不包括所述预设特征码。
进一步的,所述特征码符合预设规则;所述返回地址与所述第二执行语句不关联,包括:所述返回地址的预设偏移范围内的字节不符合所述预设规则。
进一步的,所述插入特征码,包括:通过内联二进制码的方式插入所述特征码。
进一步的,所述第二执行语句包括条件分支,所述条件分支的条件的值为假。
进一步的,所述条件分支的条件包括不透明谓词。
第二方面,本公开实施例提供一种函数调用装置,包括:确定模块,用于确定第一执行语句,所述第一执行语句用于调用目标函数;第一增加模块,用于在所述第一执行语句前或所述第一执行语句后增加第二执行语句;第二增加模块,用于在所述目标函数中增加第三执行语句,所述第三执行语句用于:确定所述目标函数的返回地址;响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。
进一步的,所述第三执行语句还用于响应于所述返回地址与所述第二执行语句关联,继续调用所述目标函数。
进一步的,所述确定模块用于根据编译器处理后的表示形式确定所述第一执行语句。
进一步的,所述第二执行语句用于插入特征码。
进一步的,所述特征码是预设特征码;所述返回地址与所述第二执行语句不关联,包括:所述返回地址的预设偏移范围内的字节不包括所述预设特征码。
进一步的,所述特征码符合预设规则;所述返回地址与所述第二执行语句不关联,包括:所述返回地址的预设偏移范围内的字节不符合所述预设规则。
进一步的,所述插入特征码,包括:通过内联二进制码的方式插入所述特征码。
进一步的,所述第二执行语句包括条件分支,所述条件分支的条件的值为假。
进一步的,所述条件分支的条件包括不透明谓词。
第三方面,本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述第一方面中的任一所述函数调用方法。
第四方面,本公开实施例提供一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,当所述计算机指令被计算机执行时,使得所述计算机执行前述第一方面中的任一所述函数调用方法。
本公开公开了一种函数调用方法、装置、电子设备和计算机可读存储介质。其中所述函数调用方法包括:确定第一执行语句,所述第一执行语句用于调用目标函数;在所述第一执行语句前或所述第一执行语句后增加第二执行语句;在所述目标函数中增加第三执行语句,所述第三执行语句用于:确定所述目标函数的返回地址;响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。本公开实施例提供的函数调用方法、装置、电子设备和计算机可读存储介质,能够有效避免目标函数被非法调用,并且不影响目标函数被合法调用。
上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
具体实施方式
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图示中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
图1为本公开实施例提供的函数调用方法实施例一的流程图,本实施例提供的该函数调用方法可以由一个函数调用装置来执行,该函数调用装置可以实现为软件,或者实现为软件和硬件的组合,例如通过计算机设备来执行本实施例提供的该函数调用方法。如图1所示,该方法包括如下步骤:
步骤S101,确定第一执行语句,所述第一执行语句用于调用目标函数。
如本领域技术人员所理解,计算机程序开发人员编写的计算机程序中会通过函数调用语句调用函数以实现各种功能,计算机程序最终会被编译器编译为计算机设备可以识别和执行的二进制代码,并被各种计算机设备执行,从而攻击者很容易获取到计算机程序的二进制代码,并借助反向工具确定计算机程序的逻辑和计算机程序中目标函数的功能,进而可以随意对目标函数进行非法调用。因此,为了防止目标函数被攻击者非法调用,并且不影响目标函数被合法的调用,需要对计算机程序开发人员编写的计算机程序进行改写。在步骤S101中,先从计算机程序中确定用于调用目标函数的执行语句,即确定第一执行语句,以便后续改写。需要注意的是,本公开实施例中,计算机程序由编程语言编写而成,所述计算机程序中包括一个或多个计算机函数,例如计算机程序可以是运行在移动终端或台式计算机终端并实现某种功能的计算机应用;目标函数即计算机函数,在一个可选的实施例中,目标函数是期望能够被防止非法调用的函数;执行语句可以为一条或多条计算机指令。
在一个可选的实施例中,可以通过查找函数名称的方式确定该第一执行语句。例如,通过直接函数调用的方式对目标函数进行调用时,可以以目标函数的函数名称为关键字对计算机程序进行遍历查找,从而确定调用目标函数的执行语句。
在又一个可选的实施例中,可以根据编译器处理后的表示形式从计算机程序中确定所述第一执行语句。在调用函数时,除了采用直接函数调用的方式,还可以采用间接函数调用的方式,其中,间接函数调用的方式包括通过指针对目标函数进行调用,这时,仅通过查找函数名称的方式较难确定调用目标函数的第一执行语句。因此,所述计算机程序可以是未经编译器处理的表现形式,包括但不限于是C语言,C++语言,或者JAVA语言程序;所述计算机程序还可以是具有经过编译器处理后的表现形式的计算机程序,从而在经过编译器处理后的所述计算机程序中,基于编译器处理后的表示形式确定调用目标函数的第一执行语句。由于经过编译器处理后的用于调用目标函数的计算机程序具有特定的表现形式,因此可以针对该特定的表现形式进行查找,从而确定调用目标函数的该第一执行语句。根据上述实施例,即使计算机程序采用间接函数调用的方式调用目标函数,也能够准确确定出调用目标函数的第一执行语句。例如,在经过底层虚拟机(low level virtual machine,LLVM)编译器处理后的计算机程序中,通过直接函数调用方式和间接函数调用方式对目标函数进行调用的执行语句会被处理为CallInst或InvokeInst的表示形式,因此通过对CallInst语句和InvokeInst语句进行查找,就可以确定调用目标函数的第一执行语句。
可以理解的是,本公开实施例中,通过步骤S101,可以确定一个或多个用于调用目标函数的第一执行语句,本申请实施例对通过步骤S101确定的第一执行语句的数量不做限制。例如上述实施例中,通过对计算机程序或计算机指令中的CallInst语句和InvokeInst语句进行查找,计算机程序中所有通过直接函数调用方式和间接函数调用方式对目标函数进行调用的执行语句都会被确定为第一执行语句,并且多个第一执行语句有可能调用了不同的计算机函数(在这个例子中,这些不同的计算机函数都是目标函数)。当所述目标函数是特定的计算机函数时,例如所述目标函数的具有特定函数名称,还可以在前述的不同的计算机函数中通过对特定函数名称进行查找,确定出用于调用具有所述特定函数名称的目标函数的第一执行语句。
步骤S102,在所述第一执行语句前或所述第一执行语句后增加第二执行语句;
可以理解的是,本公开实施例中,由于在所述第一执行语句前或所述第一执行语句后增加所述第二执行语句,所述第一执行语句和所述第二执行语句的位置是邻近的。例如在所述第一执行语句前或所述第一执行语句后的预设范围内增加所述第二执行语句,从而所述第一执行语句和所述第二执行语句间隔不超过预设数量的计算机指令,也就是说,所述第一执行语句和所述第二执行语句之间可以不存在其他的计算机指令,也可以存在不超过预设数量的计算机指令,本公开对此不做限定。由于所述第一执行语句和所述第二执行语句的位置是邻近的,并且所述第一执行语句用于调用所述目标函数,因此所述目标函数的返回地址与所述第二执行语句存在关联关系,例如所述目标函数的返回地址与所述第二执行语句的地址也是邻近的。以所述第二执行语句在所述第一执行语句之后且所述第二执行语句与所述第一执行语句之间不存在其他计算机指令为例,计算机程序按顺序先执行所述第一执行语句,然后将执行所述第二执行语句,而所述第一执行语句用于调用所述目标函数,那么所述目标函数的返回地址是所述第二执行语句的地址。如同本领域技术人员所理解的,本公开实施例中的地址可以指逻辑地址,也可以指物理地址。
值得说明的是,本公开实施例中的执行语句可以是任何形式的计算机指令,例如,可以是任何高级计算机语言的计算机指令,可以是二进制表示的计算机指令,可以是未经编译器编译的计算机指令,也可以是经过编译器处理的计算机指令,本公开对此不做限定。例如,对于第一执行语句是未经编译器编译的计算机指令的情形,上述步骤中的增加第二执行语句操作可以在该第一执行语句被编译器编译之前进行,那么将根据所述编译器编译之前的表示形式增加所述第二执行语句;上述步骤中的增加第二执行语句操作也可以在该第一执行语句被编译器编译之后进行,那么将根据所述编译器编译之后的表示形式增加所述第二执行语句。例如,包括所述第一执行语句的计算机程序整体经过编译器处理为与该编译器对应的表示形式,那么所述第一执行语句具有与该编译器对应的表示形式,上述步骤中的增加第二执行语句操作可以是根据所述编译器编译之后的表示形式增加所述第二执行语句。
步骤S103,在所述目标函数中增加第三执行语句,所述第三执行语句用于:
确定所述目标函数的返回地址;
响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。
如前所述,步骤S102中在所述第一执行语句前或所述第一执行语句后增加第二执行语句,而所述第一执行语句用于调用所述目标函数,从而所述目标函数的返回地址与所述第二执行语句存在关联关系,例如,所述第二执行语句的地址在所述目标函数的返回地址的邻近范围内的;但是,如果是攻击者的计算机程序非法调用所述目标函数,攻击者的计算机程序中只存在用于调用所述目标函数的执行语句,并不存在本公开实施例中的第二执行语句,因此当攻击者的该执行语句调用所述目标函数时,所述目标函数的返回地址与所述第二执行语句不会存在关联关系,当攻击者的计算机程序调用并执行所述目标函数时,在所述目标函数中,会确定所述目标函数的返回地址,然后响应于该返回地址与所述第二执行语句不关联,停止调用所述目标函数。这样就达到了防止所述目标函数被非法调用的目的。可以理解的是,本公开实施例中,可以在所述目标函数的返回语句之前增加所述第三执行语句,例如可以在所述目标函数的开头增加所述第三执行语句,还可以在所述目标函数的中间增加所述第三执行语句。
在一个可选的实施例中,所述第三执行语句还用于:响应于所述返回地址与所述第二执行语句关联,继续调用所述目标函数。所述返回地址与所述第二执行语句关联意味着是对所述目标函数的合法调用,从而在计算机程序调用并执行所述目标函数时,所述目标函数通过第三执行语句确定是合法调用,继续执行所述目标函数并返回函数结果。
在一个可选的实施例中,所述返回地址与所述第二执行语句不关联,包括所述目标函数的返回地址与所述第二执行语句的地址不是邻近的,从而所述第三执行语句用于响应于所述返回地址与所述第二执行语句的地址不邻近,停止调用所述目标函数。在该实施例中,所述第三执行语句还可以用于响应于所述返回地址与所述第二执行语句的地址邻近,继续调用所述目标函数。
在又一个可选的实施例中,所述第二执行语句用于插入特征码;所述返回地址与所述第二执行语句不关联,包括所述目标函数的返回地址与所述特征码不关联,从而所述第三执行语句用于响应于所述返回地址与所述特征码不关联,停止调用所述目标函数。在该实施例中,所述第三执行语句还可以用于响应于所述返回地址与所述特征码关联,继续调用所述目标函数。
本公开实施例中,插入特征码可以通过内联二进制码的方法来实现,例如特征码可以是二进制码,在源码中可以通过“___asm___volatile(二进制码)”语句可以将括号内的二进制码插入到最终生成的二进制计算机指令中,在LLVM编译器处理后的表示形式中,可以通过llvm::InlineAsm语句将二进制码插入到最终生成的二进制计算机指令中。
本公开实施例公开的函数调用方法,包括:确定第一执行语句,所述第一执行语句用于调用目标函数;在所述第一执行语句前或所述第一执行语句后增加第二执行语句;在所述目标函数中增加第三执行语句,所述第三执行语句用于:确定所述目标函数的返回地址;响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。采用上述实施例,对计算机程序中调用目标函数的第一执行语句进行处理(在所述第一执行语句前或后增加第二执行语句),并且在被调用的目标函数中增加第三执行语句,在调用并执行所述目标函数时,通过第三执行语句确定当前对目标函数的调用是合法调用或非法调用,对于非法调用,将停止调用所述目标函数,对于合法调用,将继续执行所述目标函数而不会产生任何不利影响,能够有效避免目标函数被非法调用,并且不影响目标函数被合法调用。
在一个可选的实施例中,所述第二执行语句包括条件分支,所述条件分支的条件的值为假。如本领域技术人员所理解,条件分支为计算机程序中的常见形式,一般包括一条或多条计算机指令,计算设备根据与所述条件分支对应的条件值确定是否执行所述条件分支中的计算机指令,当所述条件值为真时,所述计算设备会执行所述条件分支中的计算机指令,当所述条件值为假时,所述计算设备不会执行所述条件分支中的计算机指令。由于该条件分支的条件的值为假,因此该条件分支或该第二执行语句不会被执行,从而不会影响计算机程序的功能,但是增加的假分支可以用来混淆所述计算机程序的流程,为逆向分析所述计算机程序增加难度。例如所述第二执行语句的表现形式包括:
If(0)所述第二执行语句对应的计算机指令;或
While(0)do所述第二执行语句对应的计算机指令。
在另一个可选的实施例中,可以将所述第一执行语句转化为条件分支,所述条件分支的条件的值为真,其同样可以混淆所述计算机程序的流程,为逆向分析所述计算机程序增加难度。例如转化后的所述第一执行语句的表现形式包括:
if(1)所述第一执行语句对应的计算机指令;或
while(1)do所述第一执行语句对应的计算机指令。
如本领域技术人员所理解,本公开实施例中,上述条件分支包括但不限于if语句,if else语句,while do语句,或switch语句等条件分支语句。
在又一个可选的实施例中,将所述第一执行语句转化为条件分支,所述第一执行语句的该条件分支的条件的值为真。所述第一执行语句用于调用所述目标函数,并且在所述第一执行语句前或后增加所述第二执行语句,所述第二执行语句包括条件分支,所述第二执行语句的该条件分支的条件的值为假。以所述第一执行语句包括if语句,所述第二执行语句包括else语句为例,所述第一执行语句和所述第二执行语句的表现形式包括:
if(1)目标函数;//转化后的第一执行语句包括if语句
//所述第一执行语句调用目标函数
else插入特征码;//增加的第二执行语句插入特征码
//所述else语句不会被执行
在上述实施例中,将计算机程序中调用所述目标函数的第一执行语句转化为条件值为真的if语句,因此计算机程序经过编译后该第一执行语句会被正常执行,不影响原计算机程序的功能,而增加的第二执行语句即else分支,由于其条件值为假故不会被执行,但是该第二执行语句依然会被编译,从而最终生成的计算机二进制代码中依然会包括该第二执行语句,如果该第二执行语句用于插入本公开实施例中的所述特征码,那么最终生成的计算机二进制代码中也会包括所述特征码,从而可以通过所述目标函数中的第三执行语句,响应于所述返回地址与所述特征码关联,继续调用所述目标函数,或者,对于攻击者的计算机程序,响应于所述返回地址与所述特征码不关联,停止调用所述目标函数。
在一个可选的实施例中,所述条件语句的条件可以通过不透明谓词实现。所述不透明谓词,也称为不透明谓词表达式,是指对于计算机程序开发人员来说,一个不透明谓词表达式在编译前,所述不透明谓词表达式的值就已经是确定的,但编译器对该不透明谓词表达式进行编译后,所述编译器并不能确定该不透明谓词表达式的值。不透明谓词表达式通常可以作为判定条件,例如三个连续的正整数中一定有一个是3的倍数,那么表达式x*(x+1)*(x+2)%3==0可以作为恒为真的判定条件,相反,表达式x*(x+1)*(x+2)%3!=0可以作为恒为假的判定条件,由于实现中要考虑溢出的情况,因此可以对正整数x的取值范围进行限定,例如x可以随机在1到1000的范围进行取值,如此该表达式x*(x+1)*(x+2)%3==0的值或x*(x+1)*(x+2)%3!=0的值对于计算机程序开发人员来说是确定的,但是编译器在对其进行编译时,编译器无法确定x的值,因此编译器也就无法确定该表达式的值。现有技术中,许多先进的编译器具有优化功能,例如在对计算机程序进行编译时,对于计算机程序中明确的条件值为假的条件分支,将会在编译过程中删除,从而在最终生成的二进制代码中不会包括该条件分支,但是如果采用值恒为假的不透明谓词表达式作为该条件分支的条件,由于不透明谓词中存在编译器无法确定的值(上述不透明谓词中的x),该条件值为假的条件分支将会被编译器编译并保存在最终生成的二进制代码中,从而可以通过该条件值为假的分支实现本公开实施例中的第二执行语句。通过上述方式,可以增加攻击者逆向分析本公开提供的函数调用方法的难度。
在一个可选的实施例中,可以构造多个恒为真或者恒为假的不透明谓词表达式,当需要条件值为真的条件分支时可以从多个恒为真的不透明谓词表达式中随机选取一个作为所述条件分支的条件,例如从多个恒为真的不透明谓词表达式中随机选取一个作为所述第一执行语句的条件;当需要条件值为假的条件分支时可以从多个恒为假的不透明谓词表达式中随机选取一个作为所述条件分支的条件,例如从多个恒为假的不透明谓词表达式中随机选取一个作为所述第二执行语句的条件。
如图2所示,在本公开的函数调用方法的另一个实施例中,所述第二执行语句插入的特征码是预设的特征码,所述步骤S103中增加的第三执行语句用于:
步骤S201,确定所述目标函数的返回地址;
步骤S202,响应于所述返回地址的预设偏移范围内的字节不包括所述预设特征码,停止调用所述目标函数。
如前所述,如果是攻击者的计算机程序非法调用所述目标函数,攻击者的计算机程序中只存在用于调用所述目标函数的执行语句,并不存在本公开实施例中的第二执行语句,因此攻击者调用所述目标函数的执行语句对应的所述目标函数的返回地址,与所述第二执行语句不会存在关联关系,该返回地址的预设偏移范围内的字节不会包括所述预设特征码,当攻击者的计算机程序调用并执行所述目标函数时,在所述目标函数中,会基于确定攻击者调用所述目标函数的计算机指令确定所述目标函数的返回地址,然后响应于所述返回地址的预设偏移范围内的字节不包括所述预设特征码,停止调用所述目标函数。
在一个可选的实施例中,还可以包括步骤S203,响应于所述返回地址的预设偏移范围内的字节包括所述预设特征码,继续调用所述目标函数。如前所述,在本公开实施例中,所述第一执行语句和所述第二执行语句的位置是邻近的,与所述第一执行语句关联的返回地址与所述第二执行语句存在关联关系,如果是第一执行语句调用所述目标函数,在所述返回地址的预设偏移范围内的字节会包括所述预设特征码,故响应于所述返回地址的预设偏移范围内的字节包括所述预设特征码,继续调用所述目标函数。
需要说明的是,本申请实施例不限制上述步骤S202和步骤S203的先后顺序,并且上述步骤S202和步骤S203是和/或的逻辑关系,即上述实施例可以只包括步骤S202,也可以只包括步骤S203,还可以包括步骤S202和步骤S203。
如图3所示,在本公开的函数调用方法的另一个实施例中,所述第二执行语句插入的特征码符合预设规则,所述步骤S103中增加的第三执行语句用于:
步骤S301,确定所述目标函数的返回地址;
步骤S302,响应于所述返回地址的预设偏移范围内的字节不符合所述预设规则,停止调用所述目标函数。
如前所述,如果是攻击者的计算机程序非法调用所述目标函数,攻击者的计算机程序中只存在用于调用所述目标函数的执行语句,并不存在本公开实施例中的第二执行语句,因此攻击者调用所述目标函数的执行语句对应的所述目标函数的返回地址,与所述第二执行语句不会存在关联关系,该返回地址的预设偏移范围内的字节不会符合所述预设规则,当攻击者的计算机程序调用并执行所述目标函数时,在所述目标函数中,会基于攻击者调用所述目标函数的计算机指令确定所述目标函数的返回地址,然后响应于所述返回地址的预设偏移范围内的字节不符合所述预设规则,停止调用所述目标函数。
在一个可选的实施例中,还可以包括步骤S303,响应于所述返回地址的预设偏移范围内的字节符合所述预设规则,继续调用所述目标函数。
需要说明的是,本申请实施例不限制上述步骤S302和步骤S303的先后顺序,并且上述步骤S302和步骤S303是和/或的逻辑关系,即上述实施例可以只包括步骤S302,也可以只包括步骤S303,还可以包括步骤3202和步骤S303。
图4为本公开实施例提供的函数调用装置400的结构示意图,如图4所示,该装置包括:
确定模块401,用于确定第一执行语句,所述第一执行语句用于调用目标函数;
第一增加模块402,用于在所述第一执行语句前或所述第一执行语句后增加第二执行语句;
第二增加模块403,用于在所述目标函数中增加第三执行语句,所述第三执行语句用于:
确定所述目标函数的返回地址;
响应于所述返回地址与所述第二执行语句不关联,停止调用所述目标函数。
图4所示装置可以执行图1所示实施例的方法,本实施例未详细描述的部分,可参考对图1所示实施例的相关说明。该技术方案的执行过程和技术效果参见图1所示实施例中的描述,在此不再赘述。
下面参考图5,其示出了适于用来实现本公开实施例的电子设备500的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图5示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图5所示,电子设备500可以包括处理装置(例如中央处理器、图形处理器等)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储装置508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有电子设备500操作所需的各种程序和数据。处理装置501、ROM 502以及RAM 503通过总线或通信线路504彼此相连。输入/输出(I/O)接口505也连接至总线或通信线路504。
通常,以下装置可以连接至I/O接口505:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置506;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置507;包括例如磁带、硬盘等的存储装置508;以及通信装置509。通信装置509可以允许电子设备500与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的电子设备500,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置509从网络上被下载和安装,或者从存储装置508被安装,或者从ROM 502被安装。在该计算机程序被处理装置501执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。