一种API描述文件生成的方法及装置与流程
未命名
09-22
阅读:52
评论:0
一种api描述文件生成的方法及装置
技术领域:
:1.本技术涉及网络安全
技术领域:
:,具体涉及一种api描述文件生成的方法及装置。
背景技术:
::2.随着互联网产业的急速发展,网络安全问题成为困扰互联网用户的一个难题。面对近年来层出不穷的软件,为了确定下载的软件是否为恶意软件,且避免对设备可能造成的伤害,用户需要使用沙箱技术模拟运行各种软件,监控各种软件对应用程序编程接口(applicationprogramminginterface,api)的调用行为,判断这些软件是否会执行恶意行为,从而确定这些软件是否为恶意软件。3.在这种监控方式中,沙箱技术通常需要对软件调用的api及参数进行记录,通过解析这些记录的api信息,确定沙箱中运行的软件的具体行为,然后对这些行为进行判断,确定其是否为恶意行为,继而判断软件是否为恶意软件,并确定软件的威胁性。4.为了解析这些记录的api信息,则需要为沙箱提供相应的api描述文件,以使沙箱可以根据api描述文件中对api及api参数的描述,确定上述软件调用api所产生的动作效果及影响。5.然而,现存的api数量繁多,且同一个api应用在不同的操作系统时具有不同的版本,包含的api参数也各有不同。这就导致目前沙箱技术中,描述api及其参数的api描述文件无法全面覆盖所有种类所有版本的api,沙箱也就无法完全解析运行其中的软件的具体行为。6.因此,如何高效率地生成能够全面、标准地描述api及其参数的各项信息的api描述文件,是一个亟待解决的问题。技术实现要素:7.本技术提供一种api描述文件生成的方法及装置,用以高效率地生成能够全面、标准地描述api及其参数的各项信息的api描述文件。8.第一方面,本技术提供一种api描述文件生成的方法,该方法具体包括:根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;根据结构化后的各项信息,生成api描述文件。9.在本方案中,依据预设的描述结构对api的各项信息进行结构化处理,确保了种类繁多的api的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了api描述文件的兼容性。同时,本方案需要根据结构化后的各项信息,生成对应的api描述文件,增强了api描述文件中api各项信息的可读性,且降低了api描述文件的扩展难度。10.可选的,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。11.在本方式中,通过该描述结构中各项信息的描述规范的限定,电子设备可以在获取到api的信息后,提取api的各项信息,并依据描述规范的限定将api的各项信息结构化,提高了api描述文件的可读性以及可扩展性。12.可选的,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。13.在本方式中,api中包括的参数的信息被以上述描述规范限定的方式,进行结构化处理,进一步地提高了api描述文件的可读性以及可扩展性。14.可选的,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。15.可选的,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。16.可选的,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。17.在本方式中,参数、参数类型、成员数组等的属性可以通过整形数据被标识在其对应的位置中,即扩展了api描述文件的信息量,又增强了api描述文件的简洁性以及可拓展性。18.可选的,在所述根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述方法还包括:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。19.在本方式中,将api描述结构进行封装得到第一结构,在后续需要对其它api的信息进行结构化处理时,可以直接根据该第一结构提供的标准数组结构进行处理,简化了对api信息的处理流程。并且,通过该封装过程,得到的api描述结构也更具有可读性,且描述内容更为简洁,信息含量更多。20.可选的,所述封装所述api描述结构,包括:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。21.在本方式中,通过将部分描述规范进行一次封装,在完成封装后继续对全部第二结构进行二次封装,如此,在处理api的各项信息时,可以根据第一结构与第二结构,分别处理不同的信息,提高了api各项信息的处理效率,且进一步地提升了api描述结构的可读性。22.第二方面,本技术提供一种api描述文件生成的装置,所述装置包括:处理模块,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;生成模块,用于根据结构化后的各项信息,生成api描述文件。23.可选的,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。24.可选的,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。25.可选的,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。26.可选的,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。27.可选的,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。28.可选的,在所述处理模块用于根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述处理模块还用于:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。29.可选的,所述处理模块用于封装所述api描述结构时,具体用于:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。30.第三方面,提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述至少一个处理器通过执行第一方面或第一方面任一种可选的实施方式中所述的方法。31.第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储指令,当所述指令被执行时,使如第一方面或第一方面任一种可选的实施方式中的方法被实现。32.本技术实施例中第二、第三以及第四方面中提供的一个或多个技术方案所具有的技术效果或优点,均可以由第一方面中提供的对应的一个或多个技术方案所具有的技术效果或优点对应解释。附图说明33.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。34.图1为本技术实施例提供的一种api描述文件生成的方法的流程图;35.图2为本技术实施例提供的一种api描述结构可能实现方式的示意图;36.图3为本技术实施例提供的一种参数数组描述规范的可能实现方式的示意图;37.图4为本技术实施例提供的一种参数类型描述规范的可能实现方式的示意图;38.图5为本技术实施例提供的一种成员数组描述规范的可能实现方式的示意图;39.图6为本技术实施例提供的一种api描述结构的逻辑架构示意图;40.图7为本技术实施例提供的一种针对windows操作系统封装宏的定义的示意图;41.图8为本技术实施例提供的一种模块封装api描述结构的宏定义示意图;42.图9为本技术实施例提供的一种针对linux操作系统封装宏的定义的示意图;43.图10为本技术实施例提供的一种linux封装内核模块的宏定义示意图;44.图11为本技术实施例提供ntcreateprocess函数描述结果示意图;45.图12为本技术实施例提供write函数描述结果示意图;46.图13为本技术实施例提供的一种api描述文件生成的装置的结构示意图;47.图14为本技术实施例提供的一种电子设备的结构示意图。具体实施方式48.下面通过附图以及具体实施例对本技术技术方案做详细的说明,应当理解本技术实施例以及实施例中的具体特征是对本技术技术方案的详细的说明,而不是对本技术技术方案的限定,在不冲突的情况下,本技术实施例以及实施例中的技术特征可以相互组合。49.需要理解的是,在本技术实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。在本技术实施例的描述中“多个”,是指两个或两个以上。50.本技术实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。51.沙箱(sandbox)是一个虚拟系统程序,通过该虚拟系统程序,用户可以在虚拟环境中运行程序,而在该运行过程中所产生的变化可以在后续处理中删除。换言之,通过沙箱技术可以创造一个独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。因此,在网络安全测试中,沙箱被用于测试不受信任的文件或应用程序等的行为。52.具体的,沙箱在检测不受信任的应用程序的行为时,主要是通过监控记录其对api的调用以及调用该api时使用的参数,并使用api描述文件解析其调用的api以及对应的api参数所产生的动作以及其对应的影响。53.因此,上述检测的重点在于,沙箱需要一个完整且全面的api描述文件。54.鉴于此,本技术实施例提出了一种api描述文件的生成方法,生成通过标准化的描述结构记录api的各种信息(包括其对应的参数信息以及参数类型信息等等)的api描述文件,该方法应用于沙箱检测过程中api信息的获取,具体则可以通过以下步骤实现。55.参见图1,为本技术实施例提供的一种api描述文件生成的方法的流程图,该方法的具体实施步骤如下:56.步骤s101:根据预设的描述结构的要求,对目标api对应的各项信息进行结构化处理;其中,该各项信息包括目标api的参数信息。57.首先需要说明的是,本方案的执行主体可以是各种具有计算功能的电子设备或服务器,例如,手机、平板、笔记本、台式计算器、虚拟服务器等等。这些设备既可以保存预设的描述结构,也可以根据其要求处理api的各项信息,而为了便于后续的解释说明,本技术实施例中均以电子设备为本方案的执行主体,介绍后续的操作步骤。58.其次,步骤s101中提到的目标api为现有的数量繁多的api中的任意一个。这些api的信息各不相同且种类复杂,因此,电子设备为了能够容纳且扩展api描述文件中包含的api的各项信息,需要对api对应的各项信息进行结构化处理。59.步骤s102:根据结构化后的各项信息,生成api描述文件。60.在电子设备完成了将目标api的各项信息的结构化处理后,即可根据得到的结构化后的各项信息,生成对应的api描述文件。61.可选的,在电子设备生成api描述文件时,可以采用以下不同的方式完成api描述文件的生成。62.方式一、同时结构化处理一个或多个api对应的各项信息,然后,根据所有的api对应的结构化后的各项信息,生成api描述文件。63.示例性的,电子设备在生成api描述文件之前,可以首先收集不同的api对应的各项信息。如此,在根据预设的描述结构的要求,对api对应的各项信息进行处理时,即可同时处理收集到的所有的api的信息。64.在得到各个api对应的结构化后的各项信息后,电子设备即可根据这些信息,生成api描述文件。65.方式二、电子设备可以预先生成一个不包含api对应信息的空白api描述文件,如此,在电子设备完成对目标api的各项信息的结构化处理后,即可将结构化后的各项信息填充至api描述文件中,从而生成目标api描述文件。66.在该方式中,预先生成的空白api描述文件中,还可以分别为不同的api提供对应的记录地址,如此,在需要将目标api信息填充至描述文件时,即可对应的将目标api的各项信息填充至api描述文件中目标api的对应地址。这样,通过不断填充地方式,生成api描述文件,提高了本方案实施时的可扩展性。67.需要说明的是,在实际使用中,上述两种方式可以结合在一起使用。例如,在第一次生成api描述文件时,面对大量的需要记录的api信息,可以使用方式一,同时处理多个api对应的信息以快速生成api描述文件。而在后续面对陆续收集到的新的api信息时,则可以采用方式二的方法,单独地将目标api对应的各项信息,填充至api描述文件中,如此,即可简单方便的拓展api描述文件所记录的api对应的信息。68.通过以上方式,api描述文件即实现了目标api的各项信息的记录。生成得到的api描述文件中包含了大量的api对应各项信息,如此,在后续进行沙箱检测时,系统只需要在该api描述文件中寻找被调用的api对应的各项信息即可,实现了一次生成永久使用的效果。69.在本方案中,依据预设的描述结构对api的各项信息进行结构化处理,确保了种类繁多的api的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了api描述文件的兼容性。同时,本方案需要根据结构化后的各项信息,生成对应的api描述文件,增强了api描述文件中api各项信息的可读性,且降低了api描述文件的扩展难度。70.以上即为本技术实施例中提供的api描述文件的生成方法。其中,上述提到的预设的描述结构则可以根据用户对api描述文件的需求具体设定,而本技术实施例则为该预设的描述结构提供了以下具体的要求范例。71.首先,针对api描述文件生成时针对各个api的整体描述可以通过以下api描述结构进行限定:72.可选的,在预设的描述结构中包括了:api描述结构,该api描述结构用于为api描述文件的生成提供描述规范。其中,该api描述结构中包括有以下一项或多项内容:73.api模块名称对应的描述规范;74.api名称对应的描述规范;75.api偏移量对应的描述规范;76.api索引项对应的描述规范;77.api特性项对应的描述规范;78.api架构项对应的描述规范;79.api标识项对应的描述规范;80.api参数数组项对应的描述规范;81.api参数数量项对应的描述规范;82.api回调指针项对应的描述规范。83.其中,上述提到的api参数数组项包括至少一个参数数组,这些参数数组用于描述api中包含的参数信息。84.通过该描述结构中各项信息的描述规范的限定,电子设备可以在获取到api的信息后,提取api的各项信息,并依据描述规范的限定将api的各项信息结构化。其中,描述规范可以根据用户的需求具体限定,实现方式并不局限于某一种,可以是文本、表格、图像等。为便于理解,本技术实施例提供了一种可能的描述规范的实现方式,其具体呈现如图2。85.根据如图2所示的api描述结构,电子设备仅需将获取到的api的各项信息填充至其对应位置即可。例如,图2中的module_name和module32_name即表示api所述的模块名称,并且,为了提高该描述结构的兼容性,在32位操作系统的环境下,两个名称相同,但是在64位的操作系统的环境下,则由module_name表示64位所属的模块名称,module32_name表示32位所属模块的名称。而在module_name之前的inspectstring则是用于规范为module_name赋值的信息的封装函数。通过该封装函数即可表示linux系统的标准字符与windows系统的宽字符。与模块名称类似,api_name则用于表示目标api的名称,其对应了上述api描述规范中提出的api名称对应的描述规范。以某一个api为例,在电子设备获取到该api所属模块的名称信息为linux_filename_kernel,api的名称信息为write时,会将这些信息按照描述结构中的描述规范进行处理,得到的结果即为:86..module_name=linux_filename_kernel;87..module32_name=linux_filename_kernel_32;88..api_name=write;89.这样,电子设备即可将获取到的api的所属模块信息以及名称信息以符合预设标准的形式被记录下来。90.与上述情况类似,图2所示的其它内容也可以依据相同的方式完成信息处理,以下则介绍图2所示的其它内容的表示含义以及其对应的描述规范:91.offset,对应api描述规范中提出的api偏移量对应的描述规范。该项用于表示api的偏移,是一个枚举值,而每一个api的偏移量都对应一个枚举值。92.index,对应api描述规范中提出的api索引项对应的描述规范。该项用于表示api的身份标识号(identity,id),是api的唯一索引。93.os_features和neg_os_features,对应api描述规范中提出的api特性项对应的描述规范。其中,os_features用于表示api支持的内核特性,而neg_os_features用于表示api不支持的内核特性。并且,os_features和neg_os_features的值使用两个长度为64比特(bit)的整形数据(int)表示。针对操作系统windows,64bit的中的每一个bit代表一种内核特性,而针对操作系统linux,每一个bit则代表一个小版本的内核特性,每一段bit则代表一个大版本的内核特性。94.arch,对应上述api描述规范中提出的api构架项对应的描述规范。arch用于表示api使用的架构,具体则使用长度为64bit的整型数据进行描述,每个bit代表一种架构。95.ordinal和reserved则一般为0。96.flag,对应上述api描述规范中提出的api标识项对应的描述规范。其中,flag用于表示api的标识,而操作系统linux一般为0,操作系统windows则包含了stdcall、fastcall、thiscall三种调用约定的标识。97.params,对应上述api描述规范中提出的api参数数组项对应的描述规范,用于表示api包含的参数数组。98.param_count,对应上述api描述规范中提出的api参数数量项对应的描述规范,用于表示api包含的参数个数。99.api_enter和api_return则对应了上述api描述规范中提出的api回调指针项对应的描述规范,分别用于表示api的入口地址回调指针和返回地址函数回调指针。100.通过上述各种描述规范,电子设备在获取到api的各项信息后,即可根据api描述结构中包含的描述规范的要求,结构化处理api的各项信息,并进一步地将其以上述标准记录在api描述文件中。101.可选的,在上述若干描述规范中,用于表示api包含的参数数组的api参数数组项对应的描述规范还可以包括以下一项或多项内容:102.参数索引项对应的描述规范;103.参数属性项对应的描述规范;104.参数类型项对应的描述规范;105.关联参数索引项对应的描述规范;106.参数返回值项对应的描述规范。107.其中,参数类型包括简单类型与复杂类型,复杂类型的参数数组中包括至少一个结构成员对应的成员数组。108.需要说明的是,一个api中包含的参数可能不止一个,因此,在本技术中,这些参数数组与api中可能包含的参数一一对应,即一个参数数组只用于描述api中的一个参数。109.与api描述结构类似,上述参数数组的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图3,为本技术实施例提供的一种参数数组描述规范的可能实现方式的示意图。在如图3所示的参数数组描述规范中,包括了:110.index,对应上述api参数数组项对应的描述规范中包括的参数索引项,用于表示在api中该参数的索引。例如,当index的值为0时表示返回值,值为1时表示api的第一个参数,依次类推。111.annotation,对应上述api参数数组项对应的描述规范中包括的参数属性项,用于描述参数属性。具体的,可以使用整形数据中的bit位表示,每个bit位代表一种属性。112.type,对应上述api参数数组项对应的描述规范中包括的参数类型项,用于描述参数类型。该值是一个枚举值,每一种参数类型对应一个枚举值。113.related_index,对应上述api参数数组项对应的描述规范中包括的关联参数索引项,用于表示该参数关联参数的索引。例如,参数buffer和参数length,作为关联参数,其中任一一个参数对应的参数数组中的该项可以记录另一个参数对应的参数id。114.flag,对应上述api参数数组项对应的描述规范中包括的参数返回值项,用于描述参数的返回值。对于输出参数而言,需要函数返回成功才能读取,而flag则使用标志位描述该函数是否返回成功。115.这样,在电子设备获取api的各项信息时,api中包括的参数信息也可以根据上述参数数组描述规范进行结构化处理,并将每个参数的信息填充至api描述文件的对应位置。116.以上述名为“write”的api中的一个参数为例,完成信息填充的参数数组的呈现效果如下:117..index=1;118..annotation=parameter_annotation_in;119..type=param_type_pprpcess_uint;120..related_index=0;121..flag=0;122.这样,api中包括的参数的信息即可以这样参数数组的形式,结构化的填充在api描述文件中。123.可选的,对于上述参数数组描述规范中的参数属性项使用bit位表示参数属性的具体实现方式,则可以采用如下表1中的比特位与参数属性的对应关系来描述参数的属性。124.表1125.543210flag000000parameter_annotaion_voidꢀꢀꢀꢀꢀ1parameter_annotaion_inꢀꢀꢀꢀ1parameter_annotaion_outꢀꢀꢀ1ꢀꢀparameter_annotaion_optꢀꢀ1ꢀꢀꢀparameter_annotaion_bcount1ꢀꢀꢀꢀparameter_annotaion_ecount1ꢀꢀꢀꢀꢀparameter_annotaion_partꢀꢀꢀꢀ11parameter_annotaion_out126.其中,表1flag列中各个标识所表示的含义如下:127.parameter_annotaion_void描述参数为空;128.parameter_annotaion_in描述输入参数;129.parameter_annotaion_out描述输出参数;130.parameter_annotaion_opt表示参数是可选的,可以为空;131.parameter_annotaion_bcount描述参数值按字节计算大小;132.parameter_annotaion_ecount表示按参数类型计算参数值大小;133.parameter_annotaion_part表示使用部分缓冲区;与parameter_annotaion_out一起使用。134.这样,在电子设备针对参数数组的参数属性项进行数据填充时,即可根据获取到的api的参数数组的属性信息,以上述整形数据的形式,实现对api参数数组的参数属性的记录。135.在上述参数数组对应的各个描述规范中,对于参数对应的参数类型的描述规范还可以通过以下具体细节进行规范。136.示例性的,参数类型项的描述规范可以包括以下一项或多项内容:137.参数类型名称项对应的描述规范;138.参数类型属性项对应的描述规范;139.参数类型长度项对应的描述规范;140.参数类型成员索引项对应的描述规范;141.参数类型成员数组项对应的描述规范。142.与参数数组的描述结构类似,上述参数类型的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图4,为本技术实施例提供的一种参数类型描述规范的可能实现方式的示意图。在如图4所示的参数类型描述规范中,包括了:143.id,对应上述参数类型描述规范中包括的参数类型名称项,用于描述类型,该项的值与上述参数数组描述结构中包括的type的值一致,均用于表示该参数对应的参数类型。144.flag,对应上述参数类型描述规范中包括的参数类型属性项,用于表示该参数类型的一些属性。与参数数组属性项类似,该项的值也可以使用整形数据中的bit位表示,每个bit位代表一种属性。145.size和size32,对应上述参数类型描述规范中包括的参数类型长度项,用于表示该参数类型的长度。其分为size和size32两种是为了兼容32位沙箱和64位沙箱,具体的,对于32位沙箱这两个值相同,对于64位沙箱,size表示运行在64位沙箱的该参数类型的长度,size32表示运行在32位沙箱的该参数类型的长度。146.pindex_count,对应上述参数类型描述规范中包括的参数类型成员索引项,用于表示该参数类型以供需要记录多少个成员数组。一般而言,对于简单参数只需要记录1,而复杂类型的参数,该项则为结构类型成员的个数。147.member,对应上述参数类型描述规范中包括的参数类型成员数组项,用于表示复杂类型参数包括的成员数组,最多支持32个成员。148.member_count,用于描述复杂类型的参数包括的成员个数,对于简单类型的参数而言,该项无效。149.上述即为本技术实施例提供的参数类型对应的描述规范的一种可能的设计,在该方式中,电子设备可以预先准备好参数类型的各项信息,在获取到api的信息后进行匹配,实现对api包含的各个参数的参数类型对应的匹配,从而完成对参数类型的记录。150.可选的,对于上述参数类型描述规范中提出的参数类型属性项使用整形数据中的bit位表示,可以采用如下表2中的属性与标识的对应关系,实现对参数类型属性的表示。151.表2[0152][0153][0154]其中,表2中flag列对应的各个标识含义如下:[0155]struct_type_flag_align_p,按指针大小对齐;[0156]struct_type_flag_simple_type,参数类型分为简单类型和复杂类型,该标志表示参数是一个简单参数类型;[0157]struct_type_flag_has_base_type,表示该参数具有基础类型;[0158]struct_type_flag_pointer,表示参数类型是指针;[0159]struct_type_flag_buffer,表示参数类型是缓冲区;[0160]struct_type_flag_z,表示参数值以0结尾;[0161]struct_type_flag_var_size,表示参数类型大小是可变的;[0162]struct_type_flag_align_1,按1字节对齐;[0163]struct_type_flag_align_2,按2字节对齐;[0164]struct_type_flag_align_4,按4字节对齐;[0165]struct_type_flag_align_8,按8字节对齐;[0166]struct_type_flag_align_16,按16字节对齐;[0167]struct_type_flag_align_16k,按16k字节对齐。[0168]这样,在电子设备针对参数类型的参数属性项进行数据填充时,即可根据获取到的api的参数类型的属性信息,以上述整形数据的形式,实现对api参数类型的参数属性的记录。[0169]在上述对于参数类型的描述规范中可知,参数类型分为简单类型以及复杂类型,其中,复杂类型主要是指结构类型,这种类型的参数会包含若干成员数组,用于描述不同的信息。[0170]而该参数类型中包括的成员数组对应的描述规范,则可以包括以下一项或多项内容:[0171]成员数组索引项对应的描述规范;[0172]成员数组的参数类型项对应的描述规范;[0173]关联成员数组索引项对应的描述规范;[0174]成员数组属性项对应的描述规范;[0175]成员数组偏移项对应的描述规范。[0176]与参数数组的描述结构类似,上述成员数组的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图5,为本技术实施例提供的一种成员数组描述规范的可能实现方式的示意图。在如图5所示的成员数组描述规范中,包括了:[0177]id,对应上述成员数组描述规范中包括的成员数组索引项,用于表示在复杂类型的参数数组中包括的成员的索引,可以表示该成员数组是结构中的第几个成员。[0178]type_id,对应上述成员数组描述规范中包括的成员数组的参数类型项,表示包含该成员数组的参数的参数类型,该项的值与上述参数类型描述规范中的参数类型type是同一种数据。[0179]related_id,对应上述成员数组描述规范中包括的关联成员数组索引项,用于表示与该成员数组关联的其它成员数组的id,当该成员数组没有与之关联的成员数组时,related_id的值为0,当成员数组中的flag标识中包含struct_member_flag_fixed_array时,related_id表示数组的大小。[0180]flag,对应上述成员数组描述规范中包括的成员数组属性项,用于表示该成员数组所具备的一些属性。[0181]offset和offset32,对应上述成员数组描述规范中包括的成员数组偏移项,用于表示该成员数组对于结构首地址的偏移,在32位沙箱环境下offset与offset32相同,在64位沙箱环境下,offset表示64位下的偏移,offset32表示32位下的偏移,对齐的长度会影响offset的赋值。[0182]这样,通过上述针对成员数组的描述规范,电子设备即可实现对复杂类型的参数中包括的成员的信息的结构化处理,从而结构化后的成员数组的信息一并填充至api描述文件中。[0183]而对于上述成员数组中包括的成员数组属性项的值,同样可以采用类似参数属性项、参数类型属性项的方式,完成对成员数组属性项的记录。[0184]示例性的,如下表3,记录了成员数组的各个属性与整形数据中bit位的对应关系。[0185]表3[0186]543210flagꢀꢀꢀꢀꢀ1struct_member_flag_fixed_arrayꢀꢀꢀꢀ1struct_member_flag_var_arrayꢀꢀꢀ1ꢀꢀstruct_member_flag_bufferꢀꢀ1ꢀꢀꢀstruct_member_flag_z1ꢀꢀꢀꢀstruct_member_flag_bcount1ꢀꢀꢀꢀꢀstruct_member_flag_ecount[0187]其中,表3中flag列对应的各个标识含义如下:[0188]struct_member_flag_fixed_array,表示定长数组;[0189]struct_member_flag_var_array,表示变长数组;[0190]struct_member_flag_buffer,表示缓冲区;[0191]struct_member_flag_z,表示成员值以0结尾;[0192]struct_member_flag_bcount,表示该成员值大小以字节计数;[0193]struct_member_flag_ecount,表示该成员大小以参数类型的大小计数。[0194]这样,在电子设备针对成员数组的参数属性项进行数据填充时,即可根据获取到的api的复杂类型参数的成员数组的属性信息,以上述整形数据的形式,实现对api的复杂类型参数的成员数组的参数属性的记录。[0195]以上即为本技术实施例中提供的在api描述文件生成时需要遵循的各个描述规范。而为了生成的api描述文件具有更高的可读性以及信息承载量,电子设备可以对上述提出的api描述结构进行封装,得到对应的函数,从而可以直接使用函数名与参数表示更多的信息内容。[0196]可选的,电子设备使用宏的方式封装上述api描述结构,得到与api描述结构对应的第一结构,该第一结构用于为所述api对应的各项信息提供标准数组结构。[0197]通过本方式,电子设备可以将api描述结构进行封装,得到第一结构后,后续电子设备需要对其它api的信息进行结构化处理时,可以直接根据该第一结构提供的标准数组结构进行处理,简化了对api信息的处理流程。并且,通过该封装过程,得到的api描述结构也更具有可读性,且描述内容更为简洁,信息含量更多。[0198]上述是对api描述结构进行整体封装,而为了进一步地提升api描述结构的可读性以及api各项信息的处理效率,电子设备还可以采用如下的操作方式以达到该效果。[0199]首先,分块封装api描述结构中包括的至少一个描述规范,得到多个第二结构,其中,该第二结构与至少一个描述规范具有对应关系。[0200]接着,在完成第二结构的获取后,电子设备可以对这多个第二结构执行封装操作,从而得到第一结构,即完全封装上述提出的api描述结构。[0201]在本方式中,电子设备可以分块封装api描述结构中的各个部分。[0202]例如,电子设备可以对api描述结构中的api模块名称、api名称、api偏移量进行合并封装,得到一个第二结构,用于执行对前述内容的结构化处理。示例性的,该第二结构的封装结果如下所示:[0203][0204]其中,inspect_string_unicode与inspect_string_ansi分别表示unicode字符与标准字符,windows系统使用unicode字符,linux系统使用标准字符。[0205]又例如,电子设备可以对api描述结构中的api索引项、api特性项、api架构项、api标识项、api参数数组项、api参数数量项进行合并封装,得到一个第二结构,专门用于执行对这些内容的结构化处理。示例性的,该第二结构的封装结果如下所示:[0206][0207]还例如,电子设备还可以对api描述结构中的回调指针项单独进行封装,从而得到该内容对应的第二结构。并且,针对不同的指针情况,封装出的第二结构可以具有不同的功能。例如,封装后的函数:[0208]#defineinspect_api_hook_func_assign(f)\[0209].api_enter=f##_enter,\[0210].api_rerurn=f##_rerurn,[0211]用于对api描述结构回调函数指针赋值。[0212]而函数:[0213]#defineinspect_api_hook_func_assign_no_return(f)\[0214].api_enter=f##_enter,\[0215].api_rerurn=null,[0216]用于对api描述结构回调函数指针赋值,并且返回地址回调函数指针为空。[0217]函数:[0218]#defineinspect_api_hook_func_assign_null(f)\[0219].api_enter=null,\[0220].api_rerurn=null,[0221]同样用于对api描述结构回调函数指针赋值,但入口地址与返回地址回调函数指针均为空。[0222]以上即为电子设备对api描述结构进行分块封装的一种可实行方法的示例。而对于分块封装,电子设备还可以采用从下到上、层层封装的方式完成。[0223]参见图6,为本技术实施例提供的一种api描述结构的逻辑架构示意图。应理解,图6仅是为了展示api描述结构的逻辑关系,其中由横线表示不存在包含关系的描述规范,例如api模块名称对应的描述规范、关联参数索引项对应的描述规范等,而矩形框则表示存在包含关系的描述规范;并且,在图6所示的逻辑关系图中,横线的数量仅用于逻辑表示,并非实际的api描述结构中所包含的描述规范的数量;在实际应用中,描述规范的数量可以更多也可以更少,本技术不做限制。[0224]可选的,基于如图6所示的api描述结构的逻辑图,在对api描述进行封装操作时,可以首先对最底层的成员数组的描述规范进行封装操作。将成员数组的描述规范进行封装,得到对应的函数后,后续即可通过函数名以及其对应的参数,表示单独一个成员数组的各项信息。[0225]示例性的,对成员数组的描述规范的封装可以采用如下所示的宏封装实现,例如,使用_inspect_struct_member_assign进行成员的赋值封装,其定义如下:[0226][0227]如此,使用函数_inspect_struct_member_assign以及其对应的若干参数,即可描述任意成员数组。[0228]在封装了成员数组项对应的描述规范的基础上,参数类型项对应的描述规范则与最开始的成员数组项类似,其均为不包含上下关系的描述规范,因此,可以继续对参数类型项对应的描述规范进行宏封装,从而得到与成员数组项对应的函数类似的参数类型函数,通过该参数类型函数与其对应的参数以及成员数组函数与其对应的参数,描述任意参数类型。[0229]示例性的,对参数类型的描述规范的封装可以采用如下所示的宏封装实现,例如,可以使用宏inspect_struct_type_assign_begin和inspect_struct_type_assign_end进行赋值封装,其宏定义如下:[0230][0231]对于参数类型而言,由于包括多个成员数组的参数即为复杂类型(亦即结构类型),而不包含成员数组的参数为简单类型,因此,为了使用函数完全表示所有的参数类型,还可以使用_inspect_struct_type_simple_type_assign宏封装简单类型的参数类型的赋值,其定义如下:[0232]#define_inspect_struct_type_simple_type_assign(n,i,f)\[0233]_inspect_struct_type_assign_begin(n,i,struct_type_flag_simple_type|f,0)\[0234]_inspect_struct_type_assign_end(n)[0235]这样,在经过上述的封装过程后,即可通过参数类型的封装函数以及其对应的参数值,描述不同的参数类型。[0236]同样的,在经过上述封装后,对于api参数数组项对应的描述规范而言,其包含的描述规范均为不包括上下关系的描述规范,因此,对于api参数数组项的描述规范,同样可以采用宏封装的形式,对其进行封装,以此得到参数数组对应的函数以及函数的参数。然后即可通过该参数数组对应的函数以及函数包括的参数描述一个api中包含的各个参数数组。[0237]示例性的,对参数数组对应的描述规范的封装可以采用如下所示的宏封装实现。例如,可以使用宏_inspect_api_hook_param_assign进行封装赋值,其定义如下:[0238][0239][0240]如此,得到了对于参数数组的封装结果,用于实现对参数数组的结构化处理,而函数中的参数i即表示第i个参数,如果i为0,则表示返回值。[0241]这样,上述各个封装函数分别封装了不同的描述规范,而在对上述各个函数继续进行封装后,即可通过使用一个宏就能够完成对整个api描述结构的序列化操作。[0242]在对若干函数再次进行封装时,有时会出现不同的函数使用了相同的参数名。对于这种情况,可以通过将使用了相同参数名的公共部分提取出来,然后使用宏再封装一层。[0243]示例性的,参数数组的索引是使用了参数i进行表示的,而成员数组的索引同样是使用了参数i进行表示的。因此,对于一个包含了若干参数数组以及成员数组的api而言,其封装得到的函数中这两个i所要表示的含义需要进行区分。因此,可以为函数包括的参数名赋予前缀,以此区分不同函数中的参数。例如,参数数组的索引继续使用名为i的参数,而成员数组的索引所对应的参数则可以使用members_##i作为参数名。[0244]以上介绍了在对各层描述规范分别进行宏封装后,继续对其进行组合封装的实现方法。而在实际使用中,api描述结构中的部分内容还存在着别名,这样的别名会影响生成api描述文件时,服务器对api数据的获取。因此,本技术实施例还提供对可能存在的别名进行声明的实现方式。[0245]可选的,对于一些简单类型的别名(例如pid_t实际为uint32_t),使用宏进行封装声明。具体声明定义如下所示:[0246]#defineinspect_struct_type_assign_b(n,b)\[0247]inspect_struct_type_assign_begin(n,struct_type_flag_has_base_type,0)\[0248]inspect_struct_member_base_type_assign(b)\[0249]inspect_struct_type_assign_end(n)\[0250]如此,即可声明简单类型的别名,例如pid_t,size_t等类型。[0251]可选的,对于声明指针类型,则可以使用如下所示的宏进行封装:[0252]#defineinspect_struct_type_assign_p(n)\[0253]inspect_struct_type_assign_begin(p##n,struct_type_flag_has_base_type|struct_type_flag_pointer,0)\[0254]inspect_struct_member_base_type_assign(n)\[0255]inspect_struct_type_assign_end(p##n)[0256]上述宏表示对指针类型的描述,通过flag字段struct_type_flag_has_base_type来声明该指针有基础类型以及使用struct_type_flag_pointer声明该类型是一个指针,读取的时候按指针读取。[0257]可选的,当同时需要描述类型及其指针类型,可以使用如下所示的宏来对其进行描述类型的同时描述该类型的指针。具体的,该宏定义如下:[0258]#defineinspect_struct_type_assign_end_p(n)\[0259]inspect_struct_type_assign_end(n)\[0260]inspect_struct_type_assign_p(n)[0261]以上是基于api描述结构的逻辑架构进行的宏封装过程。在一种可能的实施方式中,为了进一步地提高api描述结构的可读性,还可以对api描述结构中的flag值进行封装。如此,即可通过不同的函数名表示参数数组项中的flag字段。同样的,对于参数类型以及成员数组中包括的属性项(即flag字段)的各类描述规范,电子设备同样可以选择对其进行封装,得到对应的自定义函数,从而简化api信息结构化的过程,提高信息处理的效率。[0262]在完成了上述封装过程后,电子设备还可以针对不同的操作系统的特性,再次对上述函数进行封装,从而得到更为简洁且具有可读性的封装函数。[0263]可选的,对于windows操作系统而言,封装宏的定义如图7所示。[0264]其中,win32_api_hook_assign_offset_common_begin与win32_api_hook_assign_offset_common_begin_n宏使用公共入口地址回调函数与公共返回地址回调函数作为函数入口地址的回调函数与函数返回地址的回调函数赋值inspectapihookparam结构。[0265]win32_api_hook_assign_offset_begin与win32_api_hook_assign_offset_begin_n宏使用特定的入口地址回调函数与特点返回地址的回调函数,回调函数名称由模块名称api名称以及入口/返回组合而成。并且,上述宏带n与不带n的区别在于带n的为neg_os_features字段赋值,不带n的neg_os_features字段为0。[0266]然后根据上述宏将windows版本的api所属的模块再封装一层,用以描述各个模块下的api。参见图8,为本技术实施例提供的一种模块封装api描述结构的宏定义示意图。[0267]而对于linux操作系统而言,由于api都是标准字符,因此,其宏封装与windows操作系统不同,具体如图9所示。[0268]其中,图9所示的宏封装中linux_api_hook_assign_offset_begin与linux_api_hook_assign_offset_end以宏组合方式,对api描述结构进行赋值,linux_api_hook_assign_offset_common_begin与linux_api_hook_assign_offset_begin的区别是linux_api_hook_assign_offset_common_begin宏使用公共回调处理函数。另外由于api名称与linux系统宏定义的冲突,因此引入了linux_api_hook_assign_offset_begin2,将api名称进行组合的方式实现对api描述结构的赋值。[0269]并且,由于linux系统api的返回值大多为整形或者长整型,因此将返回值再封装一层,其定义如下所示:[0270]#defineinspect_api_hook_param_assign_rc_long(a)\[0271]inspect_api_hook_param_assign_rc(a,long,0)[0272]#defineinspect_api_hook_param_assign_rc_int(a)\[0273]inspect_api_hook_param_assign_rc(a,int,0)[0274]其中,inspect_api_hook_param_assign_rc_long表示返回类型为长整型的api;inspect_api_hook_param_assign_rc_int表示返回值类型为整形的api。[0275]结合上述宏,linux封装了内核模块,具体的则如图10所示。其中,图10中的kernel_开头的描述,表示封装了内核模块。[0276]以上介绍了针对不同的操作系统,电子设备可以执行的宏封装操作。为了明晰本技术实施例提供的封装操作的便捷性与简洁性,以下将通过windows中ntkernel模块中ntcreateprocess函数与linux中kernel模块中的write函数对上述封装方式或几种封装方式的组合进行介绍。[0277]示例一、windows中ntkernel模块中ntcreateprocess函数。[0278]首先介绍采用上述方法封装ntcreateprocess函数的效果。如下所示:[0279]ntoskernel_api_hook_assign_common_begin(ntcreateprocess,100,[0280]0,api_hook_flag_abi_stdcall,8)[0281]inspect_api_hook_param_assign_rc_ntstatus(ntcreateprocess)[0282]inspect_api_hook_param_assign_out(ntcreateprocess,processhandle,[0283]1,pprocess_handle,0,0)[0284]inspect_api_hook_param_assign_in(ntcreateprocess,desiredaccess,2,uint32,0,0)[0285]inspect_api_hook_param_assign_in_opt_oa(ntcreateprocess,objectattributes,3,0)[0286]inspect_api_hook_param_assign_in(ntcreateprocess,parentprocess,4,handle,0,0)[0287]inspect_api_hook_param_assign_in(ntcreateprocess,inheritobjecttable,5,bool,0,0)[0288]inspect_api_hook_param_assign_in_opt(ntcreateprocess,sectionhandle,6,handle,0,0)[0289]inspect_api_hook_param_assign_in_opt(ntcreateprocess,debugport,7,handle,0,0)[0290]inspect_api_hook_param_assign_in_opt(ntcreateprocess,exceptionport,8,handle,0,0)[0291]ntoskernel_api_hook_assign_common_end(ntcreateprocess)[0292]其中,通过ntoskernel_api_hook_assign_common_begin与ntoskernel_api_hook_assign_common_end的宏组合实现了ntkernel模块下api描述结构的序列化。而inspect_api_hook_param_assign则描述了对应api的参数信息。[0293]而ntcreateprocess函数描述结果如图11所示,从图11所示的内容可以看到,上述宏组合可以封装大量的api信息内容,极大提高了代码可读性,并且通过宏组合就能够添加新的api描述信息,同时提高了序列化的便利性和扩展性。[0294]示例二、linux中kernel模块中的write函数。[0295]如下所示,下列宏组合表示了封装write函数的效果:[0296]kernel_api_hook_assign_begin(write,822,linux_feature_kernel_any,0,os_feature_arch_full,0,3)[0297]inspect_api_hook_param_assign_rc_long(write)[0298]inspect_api_hook_param_assign_in(write,fd,1,uint,0,0)[0299]inspect_api_hook_param_assign_in_buffer(write,buf,2,3,0)[0300]inspect_api_hook_param_assign_in(write,count,3,size_t,0,0)[0301]kernel_api_hook_assign_end(write)[0302]其中,通过kernel_api_hook_assign_begin与kernel_api_hook_assign_end的宏组合实现对linux中kernel模块下api描述结构的序列化。而inspect_api_hook_param_assign则描述了对应api的参数信息。而write函数描述结果如图12所示。[0303]基于同一发明构思,本技术实施例还提供一种api描述文件生成的装置。[0304]参见图13,为本技术实施例提供一种api描述文件生成的装置,该装置可以是由上述电子设备或者是该设备中的芯片或集成电路等,该装置包括用于执行上述方法实施例中由电子设备执行的方法的模块/单元/技术手段。[0305]示例性的,该装置1300包括:[0306]处理模块1301,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息。[0307]生成模块1302,用于根据结构化后的各项信息,生成api描述文件。[0308]作为一种实施例,图13论述的装置可以用于执行图1所示的实施例中所述的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考图1所示的实施例的描述,此处不再赘述。[0309]应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。[0310]作为上述装置一种可能的产品形态,参见图14,本技术实施例还提供一种电子设备1400,包括:[0311]至少一个处理器1401;以及与所述至少一个处理器1401通信连接的通信接口1403;所述至少一个处理器1401通过执行存储器1402存储的指令,使得所述电子设备1400通过所述通信接口1403执行上述方法实施例中任一设备所执行的方法步骤。[0312]可选的,所述存储器1402位于所述电子设备1400之外。[0313]可选的,所述电子设备1400包括所述存储器1402,所述存储器1402与所述至少一个处理器1401相连,所述存储器1402存储有可被所述至少一个处理器1401执行的指令。附图14用虚线表示存储器1402对于电子设备1400是可选的。[0314]其中,所述处理器1401和所述存储器1402可以通过接口电路耦合,也可以集成在一起,这里不做限制。[0315]本技术实施例中不限定上述处理器1401、存储器1402以及通信接口1403之间的具体连接介质。本技术实施例在图14中以处理器1401、存储器1402以及通信接口1403之间通过总线1404连接,总线在图14中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图14中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。应理解,本技术实施例中提及的处理器可以通过硬件实现也可以通过软件实现。当通过硬件实现时,该处理器可以是逻辑电路、集成电路等。当通过软件实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现。[0316]示例性的,处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。[0317]应理解,本技术实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataeatesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。[0318]需要说明的是,当处理器为通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)可以集成在处理器中。[0319]应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。[0320]作为另一种可能的产品形态,本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质用于存储指令,当所述指令被执行时,使得计算机执行上述方法实例中任一设备所执行的方法步骤。[0321]本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。[0322]本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0323]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0324]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0325]显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。当前第1页12当前第1页12
技术特征:
1.一种api描述文件生成的方法,其特征在于,所述方法包括:根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;根据结构化后的各项信息,生成api描述文件。2.如权利要求1所述的方法,其特征在于,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。3.如权利要求2所述的方法,其特征在于,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。4.如权利要求3所述的方法,其特征在于,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。5.如权利要求4所述的方法,其特征在于,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;
成员数组偏移项对应的描述规范。6.如权利要求3-5任一项所述的方法,其特征在于,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。7.如权利要求1-5任一项所述的方法,其特征在于,在所述根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述方法还包括:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。8.如权利要求7所述的方法,其特征在于,所述封装所述api描述结构,包括:分块封装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。9.一种api描述文件生成的装置,其特征在于,所述装置包括:处理模块,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;生成模块,用于根据结构化后的各项信息,生成api描述文件。10.如权利要求9所述的装置,其特征在于,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。11.如权利要求10所述的装置,其特征在于,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;
关联参数索引项对应的描述规范;参数返回值项对应的描述规范。12.如权利要求11所述的装置,其特征在于,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。13.如权利要求12所述的装置,其特征在于,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。14.如权利要求11-13任一项所述的装置,其特征在于,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。15.如权利要求9-13任一项所述的装置,其特征在于,在所述处理模块用于根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述处理模块还用于:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。16.如权利要求15所述的装置,其特征在于,所述处理模块用于封装所述api描述结构时,具体用于:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。17.一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述至少一个处理器执行如权利要求1-8中任一项所述的方法。18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储指令,当所述指令被执行时,使如权利要求1-8中任一项所述的方法被实现。
技术总结
本申请提供一种API描述文件生成的方法及装置,用于高效率地生成能够全面、标准地描述API及其参数的各项信息的API描述文件。该方法具体包括:根据预设描述结构的要求,对目标应用编程接口API对应的各项信息进行结构化处理;其中,各项信息包括目标API的参数信息;根据结构化后的各项信息,生成API描述文件。通过该方法,确保了种类繁多的API的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了API描述文件的兼容性。提高了API描述文件的兼容性。提高了API描述文件的兼容性。
技术研发人员:刘业欣 蒋建华 尤扬
受保护的技术使用者:北京神州绿盟科技有限公司
技术研发日:2023.05.26
技术公布日:2023/9/20
技术领域:
:1.本技术涉及网络安全
技术领域:
:,具体涉及一种api描述文件生成的方法及装置。
背景技术:
::2.随着互联网产业的急速发展,网络安全问题成为困扰互联网用户的一个难题。面对近年来层出不穷的软件,为了确定下载的软件是否为恶意软件,且避免对设备可能造成的伤害,用户需要使用沙箱技术模拟运行各种软件,监控各种软件对应用程序编程接口(applicationprogramminginterface,api)的调用行为,判断这些软件是否会执行恶意行为,从而确定这些软件是否为恶意软件。3.在这种监控方式中,沙箱技术通常需要对软件调用的api及参数进行记录,通过解析这些记录的api信息,确定沙箱中运行的软件的具体行为,然后对这些行为进行判断,确定其是否为恶意行为,继而判断软件是否为恶意软件,并确定软件的威胁性。4.为了解析这些记录的api信息,则需要为沙箱提供相应的api描述文件,以使沙箱可以根据api描述文件中对api及api参数的描述,确定上述软件调用api所产生的动作效果及影响。5.然而,现存的api数量繁多,且同一个api应用在不同的操作系统时具有不同的版本,包含的api参数也各有不同。这就导致目前沙箱技术中,描述api及其参数的api描述文件无法全面覆盖所有种类所有版本的api,沙箱也就无法完全解析运行其中的软件的具体行为。6.因此,如何高效率地生成能够全面、标准地描述api及其参数的各项信息的api描述文件,是一个亟待解决的问题。技术实现要素:7.本技术提供一种api描述文件生成的方法及装置,用以高效率地生成能够全面、标准地描述api及其参数的各项信息的api描述文件。8.第一方面,本技术提供一种api描述文件生成的方法,该方法具体包括:根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;根据结构化后的各项信息,生成api描述文件。9.在本方案中,依据预设的描述结构对api的各项信息进行结构化处理,确保了种类繁多的api的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了api描述文件的兼容性。同时,本方案需要根据结构化后的各项信息,生成对应的api描述文件,增强了api描述文件中api各项信息的可读性,且降低了api描述文件的扩展难度。10.可选的,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。11.在本方式中,通过该描述结构中各项信息的描述规范的限定,电子设备可以在获取到api的信息后,提取api的各项信息,并依据描述规范的限定将api的各项信息结构化,提高了api描述文件的可读性以及可扩展性。12.可选的,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。13.在本方式中,api中包括的参数的信息被以上述描述规范限定的方式,进行结构化处理,进一步地提高了api描述文件的可读性以及可扩展性。14.可选的,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。15.可选的,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。16.可选的,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。17.在本方式中,参数、参数类型、成员数组等的属性可以通过整形数据被标识在其对应的位置中,即扩展了api描述文件的信息量,又增强了api描述文件的简洁性以及可拓展性。18.可选的,在所述根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述方法还包括:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。19.在本方式中,将api描述结构进行封装得到第一结构,在后续需要对其它api的信息进行结构化处理时,可以直接根据该第一结构提供的标准数组结构进行处理,简化了对api信息的处理流程。并且,通过该封装过程,得到的api描述结构也更具有可读性,且描述内容更为简洁,信息含量更多。20.可选的,所述封装所述api描述结构,包括:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。21.在本方式中,通过将部分描述规范进行一次封装,在完成封装后继续对全部第二结构进行二次封装,如此,在处理api的各项信息时,可以根据第一结构与第二结构,分别处理不同的信息,提高了api各项信息的处理效率,且进一步地提升了api描述结构的可读性。22.第二方面,本技术提供一种api描述文件生成的装置,所述装置包括:处理模块,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;生成模块,用于根据结构化后的各项信息,生成api描述文件。23.可选的,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。24.可选的,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。25.可选的,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。26.可选的,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。27.可选的,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。28.可选的,在所述处理模块用于根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述处理模块还用于:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。29.可选的,所述处理模块用于封装所述api描述结构时,具体用于:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。30.第三方面,提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述至少一个处理器通过执行第一方面或第一方面任一种可选的实施方式中所述的方法。31.第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储指令,当所述指令被执行时,使如第一方面或第一方面任一种可选的实施方式中的方法被实现。32.本技术实施例中第二、第三以及第四方面中提供的一个或多个技术方案所具有的技术效果或优点,均可以由第一方面中提供的对应的一个或多个技术方案所具有的技术效果或优点对应解释。附图说明33.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。34.图1为本技术实施例提供的一种api描述文件生成的方法的流程图;35.图2为本技术实施例提供的一种api描述结构可能实现方式的示意图;36.图3为本技术实施例提供的一种参数数组描述规范的可能实现方式的示意图;37.图4为本技术实施例提供的一种参数类型描述规范的可能实现方式的示意图;38.图5为本技术实施例提供的一种成员数组描述规范的可能实现方式的示意图;39.图6为本技术实施例提供的一种api描述结构的逻辑架构示意图;40.图7为本技术实施例提供的一种针对windows操作系统封装宏的定义的示意图;41.图8为本技术实施例提供的一种模块封装api描述结构的宏定义示意图;42.图9为本技术实施例提供的一种针对linux操作系统封装宏的定义的示意图;43.图10为本技术实施例提供的一种linux封装内核模块的宏定义示意图;44.图11为本技术实施例提供ntcreateprocess函数描述结果示意图;45.图12为本技术实施例提供write函数描述结果示意图;46.图13为本技术实施例提供的一种api描述文件生成的装置的结构示意图;47.图14为本技术实施例提供的一种电子设备的结构示意图。具体实施方式48.下面通过附图以及具体实施例对本技术技术方案做详细的说明,应当理解本技术实施例以及实施例中的具体特征是对本技术技术方案的详细的说明,而不是对本技术技术方案的限定,在不冲突的情况下,本技术实施例以及实施例中的技术特征可以相互组合。49.需要理解的是,在本技术实施例的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。在本技术实施例的描述中“多个”,是指两个或两个以上。50.本技术实施例中的术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。51.沙箱(sandbox)是一个虚拟系统程序,通过该虚拟系统程序,用户可以在虚拟环境中运行程序,而在该运行过程中所产生的变化可以在后续处理中删除。换言之,通过沙箱技术可以创造一个独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。因此,在网络安全测试中,沙箱被用于测试不受信任的文件或应用程序等的行为。52.具体的,沙箱在检测不受信任的应用程序的行为时,主要是通过监控记录其对api的调用以及调用该api时使用的参数,并使用api描述文件解析其调用的api以及对应的api参数所产生的动作以及其对应的影响。53.因此,上述检测的重点在于,沙箱需要一个完整且全面的api描述文件。54.鉴于此,本技术实施例提出了一种api描述文件的生成方法,生成通过标准化的描述结构记录api的各种信息(包括其对应的参数信息以及参数类型信息等等)的api描述文件,该方法应用于沙箱检测过程中api信息的获取,具体则可以通过以下步骤实现。55.参见图1,为本技术实施例提供的一种api描述文件生成的方法的流程图,该方法的具体实施步骤如下:56.步骤s101:根据预设的描述结构的要求,对目标api对应的各项信息进行结构化处理;其中,该各项信息包括目标api的参数信息。57.首先需要说明的是,本方案的执行主体可以是各种具有计算功能的电子设备或服务器,例如,手机、平板、笔记本、台式计算器、虚拟服务器等等。这些设备既可以保存预设的描述结构,也可以根据其要求处理api的各项信息,而为了便于后续的解释说明,本技术实施例中均以电子设备为本方案的执行主体,介绍后续的操作步骤。58.其次,步骤s101中提到的目标api为现有的数量繁多的api中的任意一个。这些api的信息各不相同且种类复杂,因此,电子设备为了能够容纳且扩展api描述文件中包含的api的各项信息,需要对api对应的各项信息进行结构化处理。59.步骤s102:根据结构化后的各项信息,生成api描述文件。60.在电子设备完成了将目标api的各项信息的结构化处理后,即可根据得到的结构化后的各项信息,生成对应的api描述文件。61.可选的,在电子设备生成api描述文件时,可以采用以下不同的方式完成api描述文件的生成。62.方式一、同时结构化处理一个或多个api对应的各项信息,然后,根据所有的api对应的结构化后的各项信息,生成api描述文件。63.示例性的,电子设备在生成api描述文件之前,可以首先收集不同的api对应的各项信息。如此,在根据预设的描述结构的要求,对api对应的各项信息进行处理时,即可同时处理收集到的所有的api的信息。64.在得到各个api对应的结构化后的各项信息后,电子设备即可根据这些信息,生成api描述文件。65.方式二、电子设备可以预先生成一个不包含api对应信息的空白api描述文件,如此,在电子设备完成对目标api的各项信息的结构化处理后,即可将结构化后的各项信息填充至api描述文件中,从而生成目标api描述文件。66.在该方式中,预先生成的空白api描述文件中,还可以分别为不同的api提供对应的记录地址,如此,在需要将目标api信息填充至描述文件时,即可对应的将目标api的各项信息填充至api描述文件中目标api的对应地址。这样,通过不断填充地方式,生成api描述文件,提高了本方案实施时的可扩展性。67.需要说明的是,在实际使用中,上述两种方式可以结合在一起使用。例如,在第一次生成api描述文件时,面对大量的需要记录的api信息,可以使用方式一,同时处理多个api对应的信息以快速生成api描述文件。而在后续面对陆续收集到的新的api信息时,则可以采用方式二的方法,单独地将目标api对应的各项信息,填充至api描述文件中,如此,即可简单方便的拓展api描述文件所记录的api对应的信息。68.通过以上方式,api描述文件即实现了目标api的各项信息的记录。生成得到的api描述文件中包含了大量的api对应各项信息,如此,在后续进行沙箱检测时,系统只需要在该api描述文件中寻找被调用的api对应的各项信息即可,实现了一次生成永久使用的效果。69.在本方案中,依据预设的描述结构对api的各项信息进行结构化处理,确保了种类繁多的api的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了api描述文件的兼容性。同时,本方案需要根据结构化后的各项信息,生成对应的api描述文件,增强了api描述文件中api各项信息的可读性,且降低了api描述文件的扩展难度。70.以上即为本技术实施例中提供的api描述文件的生成方法。其中,上述提到的预设的描述结构则可以根据用户对api描述文件的需求具体设定,而本技术实施例则为该预设的描述结构提供了以下具体的要求范例。71.首先,针对api描述文件生成时针对各个api的整体描述可以通过以下api描述结构进行限定:72.可选的,在预设的描述结构中包括了:api描述结构,该api描述结构用于为api描述文件的生成提供描述规范。其中,该api描述结构中包括有以下一项或多项内容:73.api模块名称对应的描述规范;74.api名称对应的描述规范;75.api偏移量对应的描述规范;76.api索引项对应的描述规范;77.api特性项对应的描述规范;78.api架构项对应的描述规范;79.api标识项对应的描述规范;80.api参数数组项对应的描述规范;81.api参数数量项对应的描述规范;82.api回调指针项对应的描述规范。83.其中,上述提到的api参数数组项包括至少一个参数数组,这些参数数组用于描述api中包含的参数信息。84.通过该描述结构中各项信息的描述规范的限定,电子设备可以在获取到api的信息后,提取api的各项信息,并依据描述规范的限定将api的各项信息结构化。其中,描述规范可以根据用户的需求具体限定,实现方式并不局限于某一种,可以是文本、表格、图像等。为便于理解,本技术实施例提供了一种可能的描述规范的实现方式,其具体呈现如图2。85.根据如图2所示的api描述结构,电子设备仅需将获取到的api的各项信息填充至其对应位置即可。例如,图2中的module_name和module32_name即表示api所述的模块名称,并且,为了提高该描述结构的兼容性,在32位操作系统的环境下,两个名称相同,但是在64位的操作系统的环境下,则由module_name表示64位所属的模块名称,module32_name表示32位所属模块的名称。而在module_name之前的inspectstring则是用于规范为module_name赋值的信息的封装函数。通过该封装函数即可表示linux系统的标准字符与windows系统的宽字符。与模块名称类似,api_name则用于表示目标api的名称,其对应了上述api描述规范中提出的api名称对应的描述规范。以某一个api为例,在电子设备获取到该api所属模块的名称信息为linux_filename_kernel,api的名称信息为write时,会将这些信息按照描述结构中的描述规范进行处理,得到的结果即为:86..module_name=linux_filename_kernel;87..module32_name=linux_filename_kernel_32;88..api_name=write;89.这样,电子设备即可将获取到的api的所属模块信息以及名称信息以符合预设标准的形式被记录下来。90.与上述情况类似,图2所示的其它内容也可以依据相同的方式完成信息处理,以下则介绍图2所示的其它内容的表示含义以及其对应的描述规范:91.offset,对应api描述规范中提出的api偏移量对应的描述规范。该项用于表示api的偏移,是一个枚举值,而每一个api的偏移量都对应一个枚举值。92.index,对应api描述规范中提出的api索引项对应的描述规范。该项用于表示api的身份标识号(identity,id),是api的唯一索引。93.os_features和neg_os_features,对应api描述规范中提出的api特性项对应的描述规范。其中,os_features用于表示api支持的内核特性,而neg_os_features用于表示api不支持的内核特性。并且,os_features和neg_os_features的值使用两个长度为64比特(bit)的整形数据(int)表示。针对操作系统windows,64bit的中的每一个bit代表一种内核特性,而针对操作系统linux,每一个bit则代表一个小版本的内核特性,每一段bit则代表一个大版本的内核特性。94.arch,对应上述api描述规范中提出的api构架项对应的描述规范。arch用于表示api使用的架构,具体则使用长度为64bit的整型数据进行描述,每个bit代表一种架构。95.ordinal和reserved则一般为0。96.flag,对应上述api描述规范中提出的api标识项对应的描述规范。其中,flag用于表示api的标识,而操作系统linux一般为0,操作系统windows则包含了stdcall、fastcall、thiscall三种调用约定的标识。97.params,对应上述api描述规范中提出的api参数数组项对应的描述规范,用于表示api包含的参数数组。98.param_count,对应上述api描述规范中提出的api参数数量项对应的描述规范,用于表示api包含的参数个数。99.api_enter和api_return则对应了上述api描述规范中提出的api回调指针项对应的描述规范,分别用于表示api的入口地址回调指针和返回地址函数回调指针。100.通过上述各种描述规范,电子设备在获取到api的各项信息后,即可根据api描述结构中包含的描述规范的要求,结构化处理api的各项信息,并进一步地将其以上述标准记录在api描述文件中。101.可选的,在上述若干描述规范中,用于表示api包含的参数数组的api参数数组项对应的描述规范还可以包括以下一项或多项内容:102.参数索引项对应的描述规范;103.参数属性项对应的描述规范;104.参数类型项对应的描述规范;105.关联参数索引项对应的描述规范;106.参数返回值项对应的描述规范。107.其中,参数类型包括简单类型与复杂类型,复杂类型的参数数组中包括至少一个结构成员对应的成员数组。108.需要说明的是,一个api中包含的参数可能不止一个,因此,在本技术中,这些参数数组与api中可能包含的参数一一对应,即一个参数数组只用于描述api中的一个参数。109.与api描述结构类似,上述参数数组的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图3,为本技术实施例提供的一种参数数组描述规范的可能实现方式的示意图。在如图3所示的参数数组描述规范中,包括了:110.index,对应上述api参数数组项对应的描述规范中包括的参数索引项,用于表示在api中该参数的索引。例如,当index的值为0时表示返回值,值为1时表示api的第一个参数,依次类推。111.annotation,对应上述api参数数组项对应的描述规范中包括的参数属性项,用于描述参数属性。具体的,可以使用整形数据中的bit位表示,每个bit位代表一种属性。112.type,对应上述api参数数组项对应的描述规范中包括的参数类型项,用于描述参数类型。该值是一个枚举值,每一种参数类型对应一个枚举值。113.related_index,对应上述api参数数组项对应的描述规范中包括的关联参数索引项,用于表示该参数关联参数的索引。例如,参数buffer和参数length,作为关联参数,其中任一一个参数对应的参数数组中的该项可以记录另一个参数对应的参数id。114.flag,对应上述api参数数组项对应的描述规范中包括的参数返回值项,用于描述参数的返回值。对于输出参数而言,需要函数返回成功才能读取,而flag则使用标志位描述该函数是否返回成功。115.这样,在电子设备获取api的各项信息时,api中包括的参数信息也可以根据上述参数数组描述规范进行结构化处理,并将每个参数的信息填充至api描述文件的对应位置。116.以上述名为“write”的api中的一个参数为例,完成信息填充的参数数组的呈现效果如下:117..index=1;118..annotation=parameter_annotation_in;119..type=param_type_pprpcess_uint;120..related_index=0;121..flag=0;122.这样,api中包括的参数的信息即可以这样参数数组的形式,结构化的填充在api描述文件中。123.可选的,对于上述参数数组描述规范中的参数属性项使用bit位表示参数属性的具体实现方式,则可以采用如下表1中的比特位与参数属性的对应关系来描述参数的属性。124.表1125.543210flag000000parameter_annotaion_voidꢀꢀꢀꢀꢀ1parameter_annotaion_inꢀꢀꢀꢀ1parameter_annotaion_outꢀꢀꢀ1ꢀꢀparameter_annotaion_optꢀꢀ1ꢀꢀꢀparameter_annotaion_bcount1ꢀꢀꢀꢀparameter_annotaion_ecount1ꢀꢀꢀꢀꢀparameter_annotaion_partꢀꢀꢀꢀ11parameter_annotaion_out126.其中,表1flag列中各个标识所表示的含义如下:127.parameter_annotaion_void描述参数为空;128.parameter_annotaion_in描述输入参数;129.parameter_annotaion_out描述输出参数;130.parameter_annotaion_opt表示参数是可选的,可以为空;131.parameter_annotaion_bcount描述参数值按字节计算大小;132.parameter_annotaion_ecount表示按参数类型计算参数值大小;133.parameter_annotaion_part表示使用部分缓冲区;与parameter_annotaion_out一起使用。134.这样,在电子设备针对参数数组的参数属性项进行数据填充时,即可根据获取到的api的参数数组的属性信息,以上述整形数据的形式,实现对api参数数组的参数属性的记录。135.在上述参数数组对应的各个描述规范中,对于参数对应的参数类型的描述规范还可以通过以下具体细节进行规范。136.示例性的,参数类型项的描述规范可以包括以下一项或多项内容:137.参数类型名称项对应的描述规范;138.参数类型属性项对应的描述规范;139.参数类型长度项对应的描述规范;140.参数类型成员索引项对应的描述规范;141.参数类型成员数组项对应的描述规范。142.与参数数组的描述结构类似,上述参数类型的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图4,为本技术实施例提供的一种参数类型描述规范的可能实现方式的示意图。在如图4所示的参数类型描述规范中,包括了:143.id,对应上述参数类型描述规范中包括的参数类型名称项,用于描述类型,该项的值与上述参数数组描述结构中包括的type的值一致,均用于表示该参数对应的参数类型。144.flag,对应上述参数类型描述规范中包括的参数类型属性项,用于表示该参数类型的一些属性。与参数数组属性项类似,该项的值也可以使用整形数据中的bit位表示,每个bit位代表一种属性。145.size和size32,对应上述参数类型描述规范中包括的参数类型长度项,用于表示该参数类型的长度。其分为size和size32两种是为了兼容32位沙箱和64位沙箱,具体的,对于32位沙箱这两个值相同,对于64位沙箱,size表示运行在64位沙箱的该参数类型的长度,size32表示运行在32位沙箱的该参数类型的长度。146.pindex_count,对应上述参数类型描述规范中包括的参数类型成员索引项,用于表示该参数类型以供需要记录多少个成员数组。一般而言,对于简单参数只需要记录1,而复杂类型的参数,该项则为结构类型成员的个数。147.member,对应上述参数类型描述规范中包括的参数类型成员数组项,用于表示复杂类型参数包括的成员数组,最多支持32个成员。148.member_count,用于描述复杂类型的参数包括的成员个数,对于简单类型的参数而言,该项无效。149.上述即为本技术实施例提供的参数类型对应的描述规范的一种可能的设计,在该方式中,电子设备可以预先准备好参数类型的各项信息,在获取到api的信息后进行匹配,实现对api包含的各个参数的参数类型对应的匹配,从而完成对参数类型的记录。150.可选的,对于上述参数类型描述规范中提出的参数类型属性项使用整形数据中的bit位表示,可以采用如下表2中的属性与标识的对应关系,实现对参数类型属性的表示。151.表2[0152][0153][0154]其中,表2中flag列对应的各个标识含义如下:[0155]struct_type_flag_align_p,按指针大小对齐;[0156]struct_type_flag_simple_type,参数类型分为简单类型和复杂类型,该标志表示参数是一个简单参数类型;[0157]struct_type_flag_has_base_type,表示该参数具有基础类型;[0158]struct_type_flag_pointer,表示参数类型是指针;[0159]struct_type_flag_buffer,表示参数类型是缓冲区;[0160]struct_type_flag_z,表示参数值以0结尾;[0161]struct_type_flag_var_size,表示参数类型大小是可变的;[0162]struct_type_flag_align_1,按1字节对齐;[0163]struct_type_flag_align_2,按2字节对齐;[0164]struct_type_flag_align_4,按4字节对齐;[0165]struct_type_flag_align_8,按8字节对齐;[0166]struct_type_flag_align_16,按16字节对齐;[0167]struct_type_flag_align_16k,按16k字节对齐。[0168]这样,在电子设备针对参数类型的参数属性项进行数据填充时,即可根据获取到的api的参数类型的属性信息,以上述整形数据的形式,实现对api参数类型的参数属性的记录。[0169]在上述对于参数类型的描述规范中可知,参数类型分为简单类型以及复杂类型,其中,复杂类型主要是指结构类型,这种类型的参数会包含若干成员数组,用于描述不同的信息。[0170]而该参数类型中包括的成员数组对应的描述规范,则可以包括以下一项或多项内容:[0171]成员数组索引项对应的描述规范;[0172]成员数组的参数类型项对应的描述规范;[0173]关联成员数组索引项对应的描述规范;[0174]成员数组属性项对应的描述规范;[0175]成员数组偏移项对应的描述规范。[0176]与参数数组的描述结构类似,上述成员数组的描述规范也可以根据用户的实际使用需求进行设定,其实现方式同样可以是使用文本、表格、图像等。例如,参见图5,为本技术实施例提供的一种成员数组描述规范的可能实现方式的示意图。在如图5所示的成员数组描述规范中,包括了:[0177]id,对应上述成员数组描述规范中包括的成员数组索引项,用于表示在复杂类型的参数数组中包括的成员的索引,可以表示该成员数组是结构中的第几个成员。[0178]type_id,对应上述成员数组描述规范中包括的成员数组的参数类型项,表示包含该成员数组的参数的参数类型,该项的值与上述参数类型描述规范中的参数类型type是同一种数据。[0179]related_id,对应上述成员数组描述规范中包括的关联成员数组索引项,用于表示与该成员数组关联的其它成员数组的id,当该成员数组没有与之关联的成员数组时,related_id的值为0,当成员数组中的flag标识中包含struct_member_flag_fixed_array时,related_id表示数组的大小。[0180]flag,对应上述成员数组描述规范中包括的成员数组属性项,用于表示该成员数组所具备的一些属性。[0181]offset和offset32,对应上述成员数组描述规范中包括的成员数组偏移项,用于表示该成员数组对于结构首地址的偏移,在32位沙箱环境下offset与offset32相同,在64位沙箱环境下,offset表示64位下的偏移,offset32表示32位下的偏移,对齐的长度会影响offset的赋值。[0182]这样,通过上述针对成员数组的描述规范,电子设备即可实现对复杂类型的参数中包括的成员的信息的结构化处理,从而结构化后的成员数组的信息一并填充至api描述文件中。[0183]而对于上述成员数组中包括的成员数组属性项的值,同样可以采用类似参数属性项、参数类型属性项的方式,完成对成员数组属性项的记录。[0184]示例性的,如下表3,记录了成员数组的各个属性与整形数据中bit位的对应关系。[0185]表3[0186]543210flagꢀꢀꢀꢀꢀ1struct_member_flag_fixed_arrayꢀꢀꢀꢀ1struct_member_flag_var_arrayꢀꢀꢀ1ꢀꢀstruct_member_flag_bufferꢀꢀ1ꢀꢀꢀstruct_member_flag_z1ꢀꢀꢀꢀstruct_member_flag_bcount1ꢀꢀꢀꢀꢀstruct_member_flag_ecount[0187]其中,表3中flag列对应的各个标识含义如下:[0188]struct_member_flag_fixed_array,表示定长数组;[0189]struct_member_flag_var_array,表示变长数组;[0190]struct_member_flag_buffer,表示缓冲区;[0191]struct_member_flag_z,表示成员值以0结尾;[0192]struct_member_flag_bcount,表示该成员值大小以字节计数;[0193]struct_member_flag_ecount,表示该成员大小以参数类型的大小计数。[0194]这样,在电子设备针对成员数组的参数属性项进行数据填充时,即可根据获取到的api的复杂类型参数的成员数组的属性信息,以上述整形数据的形式,实现对api的复杂类型参数的成员数组的参数属性的记录。[0195]以上即为本技术实施例中提供的在api描述文件生成时需要遵循的各个描述规范。而为了生成的api描述文件具有更高的可读性以及信息承载量,电子设备可以对上述提出的api描述结构进行封装,得到对应的函数,从而可以直接使用函数名与参数表示更多的信息内容。[0196]可选的,电子设备使用宏的方式封装上述api描述结构,得到与api描述结构对应的第一结构,该第一结构用于为所述api对应的各项信息提供标准数组结构。[0197]通过本方式,电子设备可以将api描述结构进行封装,得到第一结构后,后续电子设备需要对其它api的信息进行结构化处理时,可以直接根据该第一结构提供的标准数组结构进行处理,简化了对api信息的处理流程。并且,通过该封装过程,得到的api描述结构也更具有可读性,且描述内容更为简洁,信息含量更多。[0198]上述是对api描述结构进行整体封装,而为了进一步地提升api描述结构的可读性以及api各项信息的处理效率,电子设备还可以采用如下的操作方式以达到该效果。[0199]首先,分块封装api描述结构中包括的至少一个描述规范,得到多个第二结构,其中,该第二结构与至少一个描述规范具有对应关系。[0200]接着,在完成第二结构的获取后,电子设备可以对这多个第二结构执行封装操作,从而得到第一结构,即完全封装上述提出的api描述结构。[0201]在本方式中,电子设备可以分块封装api描述结构中的各个部分。[0202]例如,电子设备可以对api描述结构中的api模块名称、api名称、api偏移量进行合并封装,得到一个第二结构,用于执行对前述内容的结构化处理。示例性的,该第二结构的封装结果如下所示:[0203][0204]其中,inspect_string_unicode与inspect_string_ansi分别表示unicode字符与标准字符,windows系统使用unicode字符,linux系统使用标准字符。[0205]又例如,电子设备可以对api描述结构中的api索引项、api特性项、api架构项、api标识项、api参数数组项、api参数数量项进行合并封装,得到一个第二结构,专门用于执行对这些内容的结构化处理。示例性的,该第二结构的封装结果如下所示:[0206][0207]还例如,电子设备还可以对api描述结构中的回调指针项单独进行封装,从而得到该内容对应的第二结构。并且,针对不同的指针情况,封装出的第二结构可以具有不同的功能。例如,封装后的函数:[0208]#defineinspect_api_hook_func_assign(f)\[0209].api_enter=f##_enter,\[0210].api_rerurn=f##_rerurn,[0211]用于对api描述结构回调函数指针赋值。[0212]而函数:[0213]#defineinspect_api_hook_func_assign_no_return(f)\[0214].api_enter=f##_enter,\[0215].api_rerurn=null,[0216]用于对api描述结构回调函数指针赋值,并且返回地址回调函数指针为空。[0217]函数:[0218]#defineinspect_api_hook_func_assign_null(f)\[0219].api_enter=null,\[0220].api_rerurn=null,[0221]同样用于对api描述结构回调函数指针赋值,但入口地址与返回地址回调函数指针均为空。[0222]以上即为电子设备对api描述结构进行分块封装的一种可实行方法的示例。而对于分块封装,电子设备还可以采用从下到上、层层封装的方式完成。[0223]参见图6,为本技术实施例提供的一种api描述结构的逻辑架构示意图。应理解,图6仅是为了展示api描述结构的逻辑关系,其中由横线表示不存在包含关系的描述规范,例如api模块名称对应的描述规范、关联参数索引项对应的描述规范等,而矩形框则表示存在包含关系的描述规范;并且,在图6所示的逻辑关系图中,横线的数量仅用于逻辑表示,并非实际的api描述结构中所包含的描述规范的数量;在实际应用中,描述规范的数量可以更多也可以更少,本技术不做限制。[0224]可选的,基于如图6所示的api描述结构的逻辑图,在对api描述进行封装操作时,可以首先对最底层的成员数组的描述规范进行封装操作。将成员数组的描述规范进行封装,得到对应的函数后,后续即可通过函数名以及其对应的参数,表示单独一个成员数组的各项信息。[0225]示例性的,对成员数组的描述规范的封装可以采用如下所示的宏封装实现,例如,使用_inspect_struct_member_assign进行成员的赋值封装,其定义如下:[0226][0227]如此,使用函数_inspect_struct_member_assign以及其对应的若干参数,即可描述任意成员数组。[0228]在封装了成员数组项对应的描述规范的基础上,参数类型项对应的描述规范则与最开始的成员数组项类似,其均为不包含上下关系的描述规范,因此,可以继续对参数类型项对应的描述规范进行宏封装,从而得到与成员数组项对应的函数类似的参数类型函数,通过该参数类型函数与其对应的参数以及成员数组函数与其对应的参数,描述任意参数类型。[0229]示例性的,对参数类型的描述规范的封装可以采用如下所示的宏封装实现,例如,可以使用宏inspect_struct_type_assign_begin和inspect_struct_type_assign_end进行赋值封装,其宏定义如下:[0230][0231]对于参数类型而言,由于包括多个成员数组的参数即为复杂类型(亦即结构类型),而不包含成员数组的参数为简单类型,因此,为了使用函数完全表示所有的参数类型,还可以使用_inspect_struct_type_simple_type_assign宏封装简单类型的参数类型的赋值,其定义如下:[0232]#define_inspect_struct_type_simple_type_assign(n,i,f)\[0233]_inspect_struct_type_assign_begin(n,i,struct_type_flag_simple_type|f,0)\[0234]_inspect_struct_type_assign_end(n)[0235]这样,在经过上述的封装过程后,即可通过参数类型的封装函数以及其对应的参数值,描述不同的参数类型。[0236]同样的,在经过上述封装后,对于api参数数组项对应的描述规范而言,其包含的描述规范均为不包括上下关系的描述规范,因此,对于api参数数组项的描述规范,同样可以采用宏封装的形式,对其进行封装,以此得到参数数组对应的函数以及函数的参数。然后即可通过该参数数组对应的函数以及函数包括的参数描述一个api中包含的各个参数数组。[0237]示例性的,对参数数组对应的描述规范的封装可以采用如下所示的宏封装实现。例如,可以使用宏_inspect_api_hook_param_assign进行封装赋值,其定义如下:[0238][0239][0240]如此,得到了对于参数数组的封装结果,用于实现对参数数组的结构化处理,而函数中的参数i即表示第i个参数,如果i为0,则表示返回值。[0241]这样,上述各个封装函数分别封装了不同的描述规范,而在对上述各个函数继续进行封装后,即可通过使用一个宏就能够完成对整个api描述结构的序列化操作。[0242]在对若干函数再次进行封装时,有时会出现不同的函数使用了相同的参数名。对于这种情况,可以通过将使用了相同参数名的公共部分提取出来,然后使用宏再封装一层。[0243]示例性的,参数数组的索引是使用了参数i进行表示的,而成员数组的索引同样是使用了参数i进行表示的。因此,对于一个包含了若干参数数组以及成员数组的api而言,其封装得到的函数中这两个i所要表示的含义需要进行区分。因此,可以为函数包括的参数名赋予前缀,以此区分不同函数中的参数。例如,参数数组的索引继续使用名为i的参数,而成员数组的索引所对应的参数则可以使用members_##i作为参数名。[0244]以上介绍了在对各层描述规范分别进行宏封装后,继续对其进行组合封装的实现方法。而在实际使用中,api描述结构中的部分内容还存在着别名,这样的别名会影响生成api描述文件时,服务器对api数据的获取。因此,本技术实施例还提供对可能存在的别名进行声明的实现方式。[0245]可选的,对于一些简单类型的别名(例如pid_t实际为uint32_t),使用宏进行封装声明。具体声明定义如下所示:[0246]#defineinspect_struct_type_assign_b(n,b)\[0247]inspect_struct_type_assign_begin(n,struct_type_flag_has_base_type,0)\[0248]inspect_struct_member_base_type_assign(b)\[0249]inspect_struct_type_assign_end(n)\[0250]如此,即可声明简单类型的别名,例如pid_t,size_t等类型。[0251]可选的,对于声明指针类型,则可以使用如下所示的宏进行封装:[0252]#defineinspect_struct_type_assign_p(n)\[0253]inspect_struct_type_assign_begin(p##n,struct_type_flag_has_base_type|struct_type_flag_pointer,0)\[0254]inspect_struct_member_base_type_assign(n)\[0255]inspect_struct_type_assign_end(p##n)[0256]上述宏表示对指针类型的描述,通过flag字段struct_type_flag_has_base_type来声明该指针有基础类型以及使用struct_type_flag_pointer声明该类型是一个指针,读取的时候按指针读取。[0257]可选的,当同时需要描述类型及其指针类型,可以使用如下所示的宏来对其进行描述类型的同时描述该类型的指针。具体的,该宏定义如下:[0258]#defineinspect_struct_type_assign_end_p(n)\[0259]inspect_struct_type_assign_end(n)\[0260]inspect_struct_type_assign_p(n)[0261]以上是基于api描述结构的逻辑架构进行的宏封装过程。在一种可能的实施方式中,为了进一步地提高api描述结构的可读性,还可以对api描述结构中的flag值进行封装。如此,即可通过不同的函数名表示参数数组项中的flag字段。同样的,对于参数类型以及成员数组中包括的属性项(即flag字段)的各类描述规范,电子设备同样可以选择对其进行封装,得到对应的自定义函数,从而简化api信息结构化的过程,提高信息处理的效率。[0262]在完成了上述封装过程后,电子设备还可以针对不同的操作系统的特性,再次对上述函数进行封装,从而得到更为简洁且具有可读性的封装函数。[0263]可选的,对于windows操作系统而言,封装宏的定义如图7所示。[0264]其中,win32_api_hook_assign_offset_common_begin与win32_api_hook_assign_offset_common_begin_n宏使用公共入口地址回调函数与公共返回地址回调函数作为函数入口地址的回调函数与函数返回地址的回调函数赋值inspectapihookparam结构。[0265]win32_api_hook_assign_offset_begin与win32_api_hook_assign_offset_begin_n宏使用特定的入口地址回调函数与特点返回地址的回调函数,回调函数名称由模块名称api名称以及入口/返回组合而成。并且,上述宏带n与不带n的区别在于带n的为neg_os_features字段赋值,不带n的neg_os_features字段为0。[0266]然后根据上述宏将windows版本的api所属的模块再封装一层,用以描述各个模块下的api。参见图8,为本技术实施例提供的一种模块封装api描述结构的宏定义示意图。[0267]而对于linux操作系统而言,由于api都是标准字符,因此,其宏封装与windows操作系统不同,具体如图9所示。[0268]其中,图9所示的宏封装中linux_api_hook_assign_offset_begin与linux_api_hook_assign_offset_end以宏组合方式,对api描述结构进行赋值,linux_api_hook_assign_offset_common_begin与linux_api_hook_assign_offset_begin的区别是linux_api_hook_assign_offset_common_begin宏使用公共回调处理函数。另外由于api名称与linux系统宏定义的冲突,因此引入了linux_api_hook_assign_offset_begin2,将api名称进行组合的方式实现对api描述结构的赋值。[0269]并且,由于linux系统api的返回值大多为整形或者长整型,因此将返回值再封装一层,其定义如下所示:[0270]#defineinspect_api_hook_param_assign_rc_long(a)\[0271]inspect_api_hook_param_assign_rc(a,long,0)[0272]#defineinspect_api_hook_param_assign_rc_int(a)\[0273]inspect_api_hook_param_assign_rc(a,int,0)[0274]其中,inspect_api_hook_param_assign_rc_long表示返回类型为长整型的api;inspect_api_hook_param_assign_rc_int表示返回值类型为整形的api。[0275]结合上述宏,linux封装了内核模块,具体的则如图10所示。其中,图10中的kernel_开头的描述,表示封装了内核模块。[0276]以上介绍了针对不同的操作系统,电子设备可以执行的宏封装操作。为了明晰本技术实施例提供的封装操作的便捷性与简洁性,以下将通过windows中ntkernel模块中ntcreateprocess函数与linux中kernel模块中的write函数对上述封装方式或几种封装方式的组合进行介绍。[0277]示例一、windows中ntkernel模块中ntcreateprocess函数。[0278]首先介绍采用上述方法封装ntcreateprocess函数的效果。如下所示:[0279]ntoskernel_api_hook_assign_common_begin(ntcreateprocess,100,[0280]0,api_hook_flag_abi_stdcall,8)[0281]inspect_api_hook_param_assign_rc_ntstatus(ntcreateprocess)[0282]inspect_api_hook_param_assign_out(ntcreateprocess,processhandle,[0283]1,pprocess_handle,0,0)[0284]inspect_api_hook_param_assign_in(ntcreateprocess,desiredaccess,2,uint32,0,0)[0285]inspect_api_hook_param_assign_in_opt_oa(ntcreateprocess,objectattributes,3,0)[0286]inspect_api_hook_param_assign_in(ntcreateprocess,parentprocess,4,handle,0,0)[0287]inspect_api_hook_param_assign_in(ntcreateprocess,inheritobjecttable,5,bool,0,0)[0288]inspect_api_hook_param_assign_in_opt(ntcreateprocess,sectionhandle,6,handle,0,0)[0289]inspect_api_hook_param_assign_in_opt(ntcreateprocess,debugport,7,handle,0,0)[0290]inspect_api_hook_param_assign_in_opt(ntcreateprocess,exceptionport,8,handle,0,0)[0291]ntoskernel_api_hook_assign_common_end(ntcreateprocess)[0292]其中,通过ntoskernel_api_hook_assign_common_begin与ntoskernel_api_hook_assign_common_end的宏组合实现了ntkernel模块下api描述结构的序列化。而inspect_api_hook_param_assign则描述了对应api的参数信息。[0293]而ntcreateprocess函数描述结果如图11所示,从图11所示的内容可以看到,上述宏组合可以封装大量的api信息内容,极大提高了代码可读性,并且通过宏组合就能够添加新的api描述信息,同时提高了序列化的便利性和扩展性。[0294]示例二、linux中kernel模块中的write函数。[0295]如下所示,下列宏组合表示了封装write函数的效果:[0296]kernel_api_hook_assign_begin(write,822,linux_feature_kernel_any,0,os_feature_arch_full,0,3)[0297]inspect_api_hook_param_assign_rc_long(write)[0298]inspect_api_hook_param_assign_in(write,fd,1,uint,0,0)[0299]inspect_api_hook_param_assign_in_buffer(write,buf,2,3,0)[0300]inspect_api_hook_param_assign_in(write,count,3,size_t,0,0)[0301]kernel_api_hook_assign_end(write)[0302]其中,通过kernel_api_hook_assign_begin与kernel_api_hook_assign_end的宏组合实现对linux中kernel模块下api描述结构的序列化。而inspect_api_hook_param_assign则描述了对应api的参数信息。而write函数描述结果如图12所示。[0303]基于同一发明构思,本技术实施例还提供一种api描述文件生成的装置。[0304]参见图13,为本技术实施例提供一种api描述文件生成的装置,该装置可以是由上述电子设备或者是该设备中的芯片或集成电路等,该装置包括用于执行上述方法实施例中由电子设备执行的方法的模块/单元/技术手段。[0305]示例性的,该装置1300包括:[0306]处理模块1301,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息。[0307]生成模块1302,用于根据结构化后的各项信息,生成api描述文件。[0308]作为一种实施例,图13论述的装置可以用于执行图1所示的实施例中所述的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考图1所示的实施例的描述,此处不再赘述。[0309]应当注意,尽管在上文详细描述中提及了装置的若干模块或子模块,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个模块中具体化。反之,上文描述的一个模块的特征和功能可以进一步划分为由多个模块来具体化。[0310]作为上述装置一种可能的产品形态,参见图14,本技术实施例还提供一种电子设备1400,包括:[0311]至少一个处理器1401;以及与所述至少一个处理器1401通信连接的通信接口1403;所述至少一个处理器1401通过执行存储器1402存储的指令,使得所述电子设备1400通过所述通信接口1403执行上述方法实施例中任一设备所执行的方法步骤。[0312]可选的,所述存储器1402位于所述电子设备1400之外。[0313]可选的,所述电子设备1400包括所述存储器1402,所述存储器1402与所述至少一个处理器1401相连,所述存储器1402存储有可被所述至少一个处理器1401执行的指令。附图14用虚线表示存储器1402对于电子设备1400是可选的。[0314]其中,所述处理器1401和所述存储器1402可以通过接口电路耦合,也可以集成在一起,这里不做限制。[0315]本技术实施例中不限定上述处理器1401、存储器1402以及通信接口1403之间的具体连接介质。本技术实施例在图14中以处理器1401、存储器1402以及通信接口1403之间通过总线1404连接,总线在图14中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图14中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。应理解,本技术实施例中提及的处理器可以通过硬件实现也可以通过软件实现。当通过硬件实现时,该处理器可以是逻辑电路、集成电路等。当通过软件实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现。[0316]示例性的,处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。[0317]应理解,本技术实施例中提及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataeatesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。[0318]需要说明的是,当处理器为通用处理器、dsp、asic、fpga或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件时,存储器(存储模块)可以集成在处理器中。[0319]应注意,本文描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。[0320]作为另一种可能的产品形态,本技术实施例还提供一种计算机可读存储介质,该计算机可读存储介质用于存储指令,当所述指令被执行时,使得计算机执行上述方法实例中任一设备所执行的方法步骤。[0321]本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。[0322]本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。[0323]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。[0324]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。[0325]显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。当前第1页12当前第1页12
技术特征:
1.一种api描述文件生成的方法,其特征在于,所述方法包括:根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;根据结构化后的各项信息,生成api描述文件。2.如权利要求1所述的方法,其特征在于,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。3.如权利要求2所述的方法,其特征在于,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;关联参数索引项对应的描述规范;参数返回值项对应的描述规范。4.如权利要求3所述的方法,其特征在于,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。5.如权利要求4所述的方法,其特征在于,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;
成员数组偏移项对应的描述规范。6.如权利要求3-5任一项所述的方法,其特征在于,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。7.如权利要求1-5任一项所述的方法,其特征在于,在所述根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述方法还包括:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。8.如权利要求7所述的方法,其特征在于,所述封装所述api描述结构,包括:分块封装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。9.一种api描述文件生成的装置,其特征在于,所述装置包括:处理模块,用于根据预设描述结构的要求,对api对应的各项信息进行结构化处理;其中,所述各项信息包括所述目标api的参数信息;生成模块,用于根据结构化后的各项信息,生成api描述文件。10.如权利要求9所述的装置,其特征在于,所述预设的描述结构包括:api描述结构,用于为所述api描述文件的生成提供描述规范;所述api描述结构中包括以下一项或多项内容:api模块名称对应的描述规范;api名称对应的描述规范;api偏移量对应的描述规范;api索引项对应的描述规范;api特性项对应的描述规范;api架构项对应的描述规范;api标识项对应的描述规范;api参数数组项对应的描述规范;其中,所述api参数数组项包括至少一个参数数组,所述参数数组用于描述所述api中包含的参数信息;api参数数量项对应的描述规范;api回调指针项对应的描述规范。11.如权利要求10所述的装置,其特征在于,所述api参数数组项对应的描述规范包括一下一项或多项内容:参数索引项对应的描述规范;参数属性项对应的描述规范;参数类型项对应的描述规范;其中,所述参数类型包括简单类型与复杂类型,所述复杂类型中包括至少一个结构成员对应的成员数组;
关联参数索引项对应的描述规范;参数返回值项对应的描述规范。12.如权利要求11所述的装置,其特征在于,所述参数类型项对应的描述规范包括以下一项或多项内容:参数类型名称项对应的描述规范;参数类型属性项对应的描述规范;参数类型长度项对应的描述规范;参数类型成员索引项对应的描述规范;参数类型成员数组项对应的描述规范。13.如权利要求12所述的装置,其特征在于,所述成员数组项对应的描述规范包括以下一项或多项内容:成员数组索引项对应的描述规范;成员数组的参数类型项对应的描述规范;关联成员数组索引项对应的描述规范;成员数组属性项对应的描述规范;成员数组偏移项对应的描述规范。14.如权利要求11-13任一项所述的装置,其特征在于,所述参数属性项通过整型数据表示,并且,所述参数具备的各项属性通过整型数据的值标识;或者,所述参数类型属性项通过整型数据表示,并且,所述参数类型具备的各项属性通过整型数据的值标识;或者,所述成员数组属性项通过整型数据表示,并且,所述成员数组具备的各项属性通过整型数据的值标识。15.如权利要求9-13任一项所述的装置,其特征在于,在所述处理模块用于根据预设的描述结构的要求,对目标应用编程接口api对应的各项信息进行结构化处理之前,所述处理模块还用于:封装所述api描述结构,得到与所述api描述结构对应的第一结构,所述第一结构用于为所述api对应的各项信息提供标准数组结构。16.如权利要求15所述的装置,其特征在于,所述处理模块用于封装所述api描述结构时,具体用于:分块分装所述api描述结构中包括的至少一个描述规范,得到多个第二结构,所述多个第二结构与所述至少一个描述规范具有对应关系;封装所述多个第二结构,得到所述第一结构。17.一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,使得所述至少一个处理器执行如权利要求1-8中任一项所述的方法。18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储指令,当所述指令被执行时,使如权利要求1-8中任一项所述的方法被实现。
技术总结
本申请提供一种API描述文件生成的方法及装置,用于高效率地生成能够全面、标准地描述API及其参数的各项信息的API描述文件。该方法具体包括:根据预设描述结构的要求,对目标应用编程接口API对应的各项信息进行结构化处理;其中,各项信息包括目标API的参数信息;根据结构化后的各项信息,生成API描述文件。通过该方法,确保了种类繁多的API的信息可以通过一种标准的格式记录在案,以方便设备读取解析信息,提高了API描述文件的兼容性。提高了API描述文件的兼容性。提高了API描述文件的兼容性。
技术研发人员:刘业欣 蒋建华 尤扬
受保护的技术使用者:北京神州绿盟科技有限公司
技术研发日:2023.05.26
技术公布日:2023/9/20
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
上一篇:接口测试方法、装置、设备及存储介质与流程 下一篇:一种产科医生用助产装置的制作方法