首页> 中国专利> 在宿主文件中捆绑文件的方法及装置

在宿主文件中捆绑文件的方法及装置

摘要

本发明公开了一种在宿主文件中捆绑文件的方法,宿主文件包括多个以一定顺序排列的用于存储数据的节,该方法包括:将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息;将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根据捆绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件的结构信息。根据本发明的在宿主文件中捆绑文件的方法和相应的装置,可以在宿主文件的最后一个节中捆绑任意长度的文件,由此解决了现有技术中只能捆绑零散的小文件,且由于宿主文件头部的信息量过于集中而可能导致报错的问题,取得了能够捆绑任意长度的大文件,且不易被报错的有益效果。

著录项

  • 公开/公告号CN102930005A

    专利类型发明专利

  • 公开/公告日2013-02-13

    原文格式PDF

  • 申请/专利号CN201210422385.1

  • 发明设计人 马茂刚;

    申请日2012-10-29

  • 分类号G06F17/30;

  • 代理机构北京市浩天知识产权代理事务所;

  • 代理人靳春鹰

  • 地址 100088 北京市西城区新街口外大街28号D座112室(德胜园区)

  • 入库时间 2024-02-19 17:52:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-04-08

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F17/30 专利号:ZL2012104223851 变更事项:专利权人 变更前:北京奇虎科技有限公司 变更后:北京奇虎科技有限公司 变更事项:地址 变更前:100088 北京市西城区新街口外大街28号D座112室(德胜园区) 变更后:100088 北京市西城区新街口外大街28号D座112室(德胜园区) 变更事项:专利权人 变更前:奇智软件(北京)有限公司 变更后:北京奇智商务咨询有限公司

    专利权人的姓名或者名称、地址的变更

  • 2015-11-25

    授权

    授权

  • 2013-03-20

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20121029

    实质审查的生效

  • 2013-02-13

    公开

    公开

说明书

技术领域

本发明涉及通信领域,具体涉及一种在宿主文件中捆绑文件的方法及装 置。

背景技术

文件捆绑又可以称为文件隐藏,具体做法是在一个文件中捆绑其他的文 件,以达到减少文件个数或隐藏部分文件的效果。其中,捆绑其他文件的文 件称为宿主文件,被捆绑到宿主文件中的文件称为捆绑文件。

由于PE文件结构本身存在着很多冗余空间,因此,PE文件经常作为宿主 文件,在其中捆绑其他文件。PE文件存在的通常比较大的空闲空间为:(1) 相邻节表之间由于数据对齐所产生的冗余空间;(2)PE文件的最末的节表之 后由于数据对齐产生的冗余空间。(3)PE结构中的DOS Stub是为DOS程 序预留的,其只有当该文件在在DOS下执行时,才会发挥真正的作用。因 此,在Windows平台下,DOS Stub完全没有作用,可以利用这部分的内容 用来隐藏文件内容。(4)PE文件结构中的很多字段作为保留存在或者对可 执行程序的执行没有影响,这部分的空间也可以用来隐藏文件内容,例如PE 文件中的以下结构:MajorLinkerVersion、MinorLinkerVersion、 ajorOperatingSystemVersion、MinorOperatingSystemVersion、CheckSum、 SizeOfCode、SizeOfInitializedData以及SizeOfUninitializedData等。 目前,在PE文件中捆绑其他文件时,首先需要寻找PE文件中的冗余空间, 并计算出每个冗余空间的位置和大小,图1示出了对PE文件的冗余空间进行 计算后得到的结果。从图1中可以看到,寻找到的PE文件中的冗余空间共有 8处,其中,DOS Stub部分的空闲空间为264B,节表和节之间的空闲空间为 3280B,最后一个节后面的空闲空间为3328B,另外,reloc(重定位表信息) 节、rsrc(资源)节、idata(导入文件名表)节、rdata(只读的初始化数据) 节以及text(.exe或.dll文件的可执行代码)节中也都存在着冗余空间,全部 冗余空间的大小总共为17488B。

然后,根据冗余空间的总数量以及每个冗余空间的大小,将捆绑文件分 割成若干个指定大小的子文件,其中,子文件的个数可以小于或等于冗余空 间的总数量,子文件的大小与冗余空间的大小基本一致。

最后,将分割后的各个子文件按一定的算法分配到PE文件的冗余空间 中。

但是,采用上述方式时,由于PE文件结构中的冗余空间容量较小且不连 续,因此,比较适合对零散的小文件进行捆绑,通常无法对体积较大的文件 进行捆绑。而且,由于PE文件结构中的冗余空间基本上都集中在PE文件的 头部,因此,导致捆绑文件全部集中在PE文件的头部,信息量过于集中,因 此,很容易被格式检查工具检测为异常进而报错,从而出现误报的情况。

发明内容

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分 地解决上述问题的在宿主文件中捆绑文件的方法和相应的在宿主文件中捆绑 文件的装置。

依据本发明的一个方面,提供了一种在宿主文件中捆绑文件的方法,宿 主文件包括多个以一定顺序排列的用于存储数据的节,该方法包括:将待捆 绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配 置信息;将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根据捆 绑文件以及配置信息,修改宿主文件的最后一个节的结构信息以及宿主文件 的结构信息。

可选地,将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件的 步骤之前进一步包括:对待捆绑的文件内容进行压缩和/或加密处理。

可选地,配置信息包括:用于指示捆绑文件是否可执行的参数信息、用 于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的 跳转地址的跳转指令。

可选地,宿主文件还包括多个以一定顺序排列的用于存储节的结构信息 的节表,则修改宿主文件的最后一个节的结构信息具体包括:修改宿主文件 的最后一个节表中的信息,最后一个节表用于存储最后一个节的结构信息, 其中,最后一个节表中的信息包括:节数据的大小,以及节数据的属性。

可选地,宿主文件的结构信息包括:宿主文件的文件大小以及宿主文件 的入口函数。

可选地,将捆绑文件以及配置信息存储在宿主文件的最后一个节中;根 据捆绑文件以及配置信息的大小,修改宿主文件的最后一个节的结构信息以 及宿主文件的结构信息的步骤具体包括:申请一块内存空间,将宿主文件复 制到内存空间,在复制的宿主文件的最后一个节中存储捆绑文件以及配置信 息;根据捆绑文件以及配置信息的大小,修改复制的宿主文件的最后一个节 的结构信息以及复制的宿主文件的结构信息;将修改后的宿主文件复制回磁 盘空间。

可选地,宿主文件为PE文件。

根据本发明的另一方面,提供了一种在宿主文件中捆绑文件的装置,宿 主文件包括多个以一定顺序排列的用于存储数据的节,该装置包括:转换单 元,其将待捆绑的文件转换为与宿主文件的格式相对应的捆绑文件,并生成 捆绑文件的配置信息;捆绑单元,其将捆绑文件以及配置信息存储在宿主文 件的最后一个节中;修改单元,其根据捆绑文件以及配置信息,修改宿主文 件的最后一个节的结构信息以及宿主文件的结构信息。

可选地,配置信息包括:用于指示捆绑文件是否可执行的参数信息、用 于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的 跳转地址的跳转指令。

可选地,宿主文件还包括多个以一定顺序排列的用于存储节的结构信息 的节表,则修改单元具体用于:修改宿主文件的最后一个节表中的信息,最 后一个节表用于存储最后一个节的结构信息,其中,最后一个节表中的信息 包括:节数据的大小,以及节数据的属性。

可选地,宿主文件的结构信息包括:宿主文件的文件大小以及宿主文件 的入口函数。

根据本发明的在宿主文件中捆绑文件的方法和相应的装置,可以在宿主 文件的最后一个节中捆绑任意长度的文件,由此解决了现有技术中只能捆绑 零散的小文件,且由于宿主文件头部的信息量过于集中而可能导致报错的问 题,取得了能够捆绑任意长度的大文件,且不易被报错的有益效果。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技 术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它 目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本 领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的, 而并不认为是对本发明的限制。而且在整个附图中,用相同的附图标记表示 相同的部件。在附图中:

图1示出了现有技术中对PE文件的冗余空间进行计算后得到的结果示意 图;

图2示出了根据本发明一个实施例的在宿主文件中捆绑文件的方法的流 程图;

图3示出了本发明一个实施例的原始的宿主文件以及捆绑了三个捆绑文 件之后的宿主文件的结构示意图;以及

图4示出了根据本发明一个实施例的在宿主文件中捆绑文件的装置的结 构图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示 了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不 应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地 理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图2示出了本发明实施例提供的一种在宿主文件中捆绑文件的方法。具 体地,宿主文件可以是PE文件,或其他与PE文件具有类似结构的文件。在 下面的描述中,以宿主文件是PE文件为例进行描述。

为了便于理解,先简单介绍一下PE文件的结构。PE文件主要包括若干 个以一定顺序排列的用于存储数据的节(section)。其中,每一个节所占用 的存储空间相同,但是,每个节中存储的实际数据长度可能不同,因此,每 个节中可能都具有用于存储数据的有效空间以及剩余的空闲空间。为了了解 每个节中存储数据的情况,需要定义节的结构信息。节的结构信息具体包括: 一个节中存储的实际数据长度、节的起始地址等。因此,为了对每一个节的 结构信息进行存储,PE文件中还包括若干个以一定顺序排列的用于存储节的 上述结构信息的节表(section table)。一般情况下,节表的数量与节的数量 一致,每一个节表用于存储对应节的结构信息,例如,第一个节表用于存储 第一个节的结构信息,第二个节表用于存储第二个节的结构信息,依此类推。

如图2所示,该方法始于步骤S210,在步骤S210中,将待捆绑的文件 转换为与宿主文件的格式相对应的捆绑文件,并生成捆绑文件的配置信息。

其中,宿主文件(即PE文件)的格式为汇编语言数据结构定义的格式, 因此,在本步骤中,首先需要将待捆绑的文件转换为汇编语言数据结构定义 格式的文件作为捆绑文件,从而与宿主文件的格式相对应。另外,还需要生 成该捆绑文件的配置信息。其中,配置信息可以包括:用于指示捆绑文件是 否可执行的参数信息、用于在宿主文件中定位捆绑文件的位置信息,以及用 于指示捆绑文件执行时的跳转地址的跳转指令。

可选地,在执行步骤S210之前,还可以进一步对待捆绑的文件内容进行 压缩和/或加密处理,以减少待捆绑的文件的体积,或者使待捆绑的文件无法 被未授权者读取,以提高安全性。

在执行完步骤S210,得到捆绑文件和配置信息之后,执行步骤S220。在 步骤S220中,将步骤S210中生成的捆绑文件以及配置信息存储在宿主文件 的最后一个节中。

执行完步骤S220后,继续执行步骤S230。在步骤S230中,根据上述捆 绑文件以及配置信息的大小,修改宿主文件的最后一个节的结构信息以及宿 主文件的结构信息。

其中,在原始的宿主文件,即PE文件中,每个节所占用的存储空间都是 相同的,且每个节对应的节表中存储了该节的结构信息,如该节存储的实际 数据长度等。但是,在执行完步骤S220之后,由于在原始的宿主文件的最后 一个节中进一步存储了上述的捆绑文件及配置信息,导致最后一个节的实际 数据长度增加了,因此,最后一个节的结构信息也随之发生了改变,进而导 致整个宿主文件的结构信息也发生了改变。所以,在步骤S230中需要根据上 述的捆绑文件及配置信息的大小,修改宿主文件的最后一个节的结构信息以 及宿主文件的结构信息,以便与加入捆绑文件后的情况相符。

其中,根据上面的描述可知,宿主文件中还包括多个以一定顺序排列的 用于存储节的结构信息的节表,因此,在步骤S230中修改宿主文件的最后一 个节的结构信息时,只需修改宿主文件的最后一个节表中的信息即可。另外, 宿主文件的结构信息主要包括宿主文件的文件大小以及宿主文件的入口函 数,因此,在步骤S230中还需要相应地修改上述信息。

具体地,在执行上述步骤S220和步骤S230时,可通过如下方式实现: 首先,申请一块内存空间,将宿主文件复制到该内存空间中,在复制的宿主 文件的最后一个节中存储捆绑文件以及配置信息;然后,根据捆绑文件以及 配置信息,修改复制的宿主文件的最后一个节的结构信息以及复制的宿主文 件的结构信息;最后,将修改后的宿主文件复制回磁盘空间即可。

采用上述方式可以实现对一个或多个文件的捆绑,而且,当捆绑文件的 长度较长时,宿主文件最后一个节的长度可以扩展,因此,可以实现对大文 件的捆绑。

下面以一个优选实施例详细描述一下本发明提供的在宿主文件中捆绑文 件的方法,在该方法中,宿主文件为PE文件。该方法包括以下步骤:

步骤一:对待捆绑的文件进行压缩和/或加密处理。

在本步骤中,可以对待捆绑的文件的文件内容进行压缩和/或加密两种处 理方式。通过压缩可以缩小待捆绑文件的体积,从而更方便地捆绑到宿主文 件中。在压缩时,可以采用多种算法,如aplib算法。通过加密可以使待捆绑 的文件无法被未授权者读取,从而提高了文件的安全性。

步骤二:将压缩和/或加密处理后的待捆绑文件转换为与宿主文件格式一 致(即汇编语言数据结构定义的格式)的文件作为捆绑文件,在下文中,捆 绑文件中的内容也称为字节码。

可选地,也可以不执行步骤一,直接执行步骤二,尤其是在待捆绑的文 件也为PE文件的时候。

步骤三:生成捆绑文件的配置信息。

捆绑文件被捆绑到宿主文件中之后,当读取到捆绑在宿主文件中的捆绑 文件时,会将捆绑文件释放出来。为了确定释放出来的捆绑文件是否可执行, 以及何时执行,就需要用到本步骤中生成的配置信息。具体的,配置信息通 常包括以下内容:用于指示捆绑文件是否可执行的参数信息、用于在宿主文 件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的跳转地址的 跳转指令等。

其中,用于指示捆绑文件是否可执行的参数例如可以通过一个标志变量 isInExeSequence实现,如果isInExeSequence=0表示不对释放出来的捆绑文件 执行运行操作,即捆绑文件不可执行,如果isInExeSequence=1表示要对释放 出来的捆绑文件执行运行操作,即捆绑文件可执行。另外,还可以额外设置 一个参数,用来规定释放出来的捆绑文件何时执行,例如立即执行,或3分 钟后执行等。用于在宿主文件中定位捆绑文件的位置信息例如可以通过一个 表示捆绑文件在宿主文件中的位置偏移的dwFileOffset参数来实现。另外,还 可以设置一个dwFileSize参数来表示捆绑文件在宿主文件中所占的大小,同 时还可以定义一个name参数来表示捆绑文件的名称。上述的参数可以通过如 下的结构体进行定义:

Typedef struct

{

String name;

BOOL isInExeSequence;

DWORD dwFileOffset;

DWORD dwFileSize;

}FILE_BINDED_STRUCT;

上述的结构体可以存储在捆绑文件中的内容(即字节码)的前面或后面, 也可以插入字节码的中间。

另外,用于指示捆绑文件执行时的跳转地址的跳转指令可以通过E9指令 来实现。具体地,可以先将一个操作数为空的E9指令附加到字节码的最后, 然后,在后续的步骤中根据实际情况修改E9指令的操作数,从而定义捆绑文 件执行时的跳转地址。该跳转地址一般指向与字节码相对应的代码,该代码 也存储在宿主文件中,用于具体执行字节码中的数据内容。

步骤四:将宿主文件复制到内存中,并将步骤二和步骤三中生成的捆绑文 件和配置信息存储到宿主文件的最后一个节中。

可选地,为了在本步骤中更准确地对宿主文件进行定位,先要获得原始的 宿主文件的大小,然后,计算宿主文件最后一个节表在文件中的偏移,以便 读取最后一个节表中的数据。其中,计算最后一个节表在文件中的偏移时, 可以采用如下代码实现:pSectionHeader= (PIMAGE_SECTION_HEADER)((BYTE*)pOptionalHeader+ sizeof(IMAGE_OPTIONAL_HEADER));

nSectionNum=pFileHeader->NumberOfSections;

for(int i=0;i<nSectionNum-1;i++)

{

pSectionHeader++;

}其中,pSectionHeader表示最后一个节表在文件中的偏移量,通过上面的 方式,即可确定出最后一个节表的位置,并读取其中的数据。具体地,节表 中包含的数据包括:表示对应的节中存储的实际数据长度的SizeOfRawData 参数,指示节的起始地址的PointerToRawData参数以及表示节的属性值的 Characteristics参数。在本步骤中,主要是读取SizeOfRawData参数以及 PointerToRawData参数的值,通过PointerToRawData参数可以确定最后一个 节的起始地址,结合SizeOfRawData参数即可确定最后一个节中实际存储的 数据的结束地址。

通过上面的方式,确定出宿主文件的上述相关信息后,就可以根据宿主 文件的最后一个节的起始地址和结束地址等信息,在最后一个节中存储捆绑 文件和配置信息了。由于原始的宿主文件是存储在磁盘上的,如果直接在磁 盘空间对原始的宿主文件进行修改,由于文件中存储的程序内部包含指针, 且由于指针的使用容易产生错误,因此,在本实施例中,先将宿主文件复制 到内存中,在内存中完成对宿主文件的修改之后再复制回磁盘,由此避免因 指针问题而导致的错误。为此,需要先计算原始的宿主文件大小与捆绑文件 和配置信息的大小之和,得出捆绑后的宿主文件大小。然后,根据计算出的 捆绑后的宿主文件大小申请一块内存空间,将原始的宿主文件复制到该内存 空间中,然后将捆绑文件和配置信息存储到复制后的宿主文件的最后一个节 中。

另外,由于宿主文件在磁盘空间中的对齐粒度和内存空间中的对齐粒度 有可能不同,因此,当宿主文件在磁盘空间中的对齐粒度和内存空间中的对 齐粒度不同时,为了将宿主文件复制到内存空间,还需要进一步计算宿主文 件在内存空间中的对齐粒度,为此,可以按照内存空间中的对齐粒度将宿主 文件的最后一个节进行对齐,以确定内存中宿主文件的最后一个节的数据长 度。具体对齐时,可采用如下代码实现:

其中,在上述代码中,定义了size参数用于指示宿主文件的总长度, ALIGN_BASE用于指示宿主文件在内存空间中对齐时的对齐粒度,返回的结 果值ret用于指示将宿主文件按照对齐粒度对齐之后,剩余的数据长度,该剩 余的数据长度即为内存中的宿主文件最后一个节的数据长度。

步骤五:根据捆绑文件以及配置信息的大小,在内存中修改宿主文件的 最后一个节的结构信息以及宿主文件的结构信息。

由于步骤四中在宿主文件中加入了捆绑文件和配置信息,导致原始的宿 主文件的相关信息需要进行适应性地修改。首先,由于宿主文件的最后一个 节中增加了内容,因此,宿主文件的最后一个节的结构信息需要适应性修改, 具体实现时,可以通过修改最后一个节表中表示对应的节存储的实际数据长 度的SizeOfRawData等参数的参数值实现,另外,还可以对宿主文件在内存 中的起始地址进行修改,同时,还需要在节表中将最后一个节的属性值设置 为可执行,可读可写,即0c0000060h。另外,还需要对宿主文件的结构信息 进行修改,例如,修改表示宿主文件的文件大小的值,其中,内存中的宿主 文件的文件大小通常叫做映像文件大小,用SizeOfImage值表示。同时修改宿 主文件的入口函数,即程序入口点AddressEntryPoint,以确定宿主文件的执 行开始点。最后,还需要对步骤三中操作数为空的E9指令进行修改,以使得 E9指令指向与字节码相对应的代码,以便具体执行字节码中的数据内容。

步骤六:将修改后的宿主文件从内存中复制回磁盘。

通过上面的步骤,就实现了在宿主文件中捆绑其他文件的目的,在释放 出宿主文件中包含的捆绑文件后,根据配置信息就可以控制捆绑文件是否可 执行以及何时执行。具体地,还可以在一个宿主文件中捆绑多个捆绑文件, 这样,在配置信息中还可以进一步定义多个捆绑文件的执行顺序,或者,多 个捆绑文件也可以默认为顺序执行。

图3示出了原始的宿主文件以及捆绑了三个捆绑文件之后的宿主文件的 结构示意图,其中,图3的左侧示意出了原始的宿主文件310,图3的右侧示 意出了捆绑后的宿主文件320。

另外,在宿主文件,即PE文件中,通常设置有用于存储数据的数据段, 以及用于存储代码的代码段,在本实施例中,可以将宿主程序中的数据和代 码都放在代码段中存储,从而避免了在数据和代码之间进行频繁地重定位, 提高了执行效率。

通过本发明实施例中的方法,可以在宿主文件中捆绑其他的文件,以减 少文件体积和发布时系统中的独立文件个数,从而便于管理,且有利于软件 的发布以及网上传输。而且,可以将一些特殊意义的文件(例如防止竞争对 手破解的、逆向的)进行隐藏。另外,还可以将一系列单独功能的小程序集 成到一个可执行文件中,对这一系列的小程序进行顺序执行,使一个可执行 程序的执行实现了多个小程序的管道执行,提供了类似于管道命令的另一种 实现。

而且,本发明最大的特点是,可以捆绑长度较长的文件,由于PE文件 的结构特性,可以对最后一个节的长度进行扩展,因此,当捆绑文件和配置 信息的长度超出了最后一个节中空闲的存储空间的长度时,可以对最后一个 节的存储空间进行扩展,以便容纳下捆绑文件和配置信息,所以采用本方法 捆绑文件时不受捆绑文件大小的限制,可以捆绑大文件甚至多个文件,拓宽 了应用范围,而且,由于本方法没有在PE文件的文件头中增加过多信息,因 而不会被格式检查工具报错。

本发明实施例还提供了一种在宿主文件中捆绑文件的装置,其中,宿主 文件包括多个以一定顺序排列的用于存储数据的节。如图4所示,该装置包 括:

转换单元410,其将待捆绑的文件转换为与宿主文件的格式相对应的捆绑 文件,并生成捆绑文件的配置信息;

捆绑单元420,其将捆绑文件以及配置信息存储在宿主文件的最后一个节 中;

修改单元430,其根据捆绑文件以及配置信息,修改宿主文件的最后一个 节的结构信息以及宿主文件的结构信息。

可选地,配置信息包括:用于指示捆绑文件是否可执行的参数信息、用 于在宿主文件中定位捆绑文件的位置信息,以及用于指示捆绑文件执行时的 跳转地址的跳转指令。

可选地,宿主文件还包括多个用于存储节的结构信息的节表,则修改单 元具体用于:修改宿主文件的最后一个节表中的信息,最后一个节表用于存 储最后一个节的结构信息,其中,最后一个节表中的信息包括:节数据的大 小,以及节数据的属性。

可选地,宿主文件的结构信息包括:宿主文件的文件大小以及宿主文件 的入口函数。

上述的转换单元410、捆绑单元420和捆绑单元430的具体实现方式可参 见上述的方法实施例中的描述。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固 有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述, 构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定 编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容, 并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发 明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详 细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个 或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时 被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开 的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求 中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映 的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循 具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利 要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自 适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以 把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可 以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者 单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴 随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或 者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴 随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相 似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其 它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组 合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权 利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使 用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理 器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当 理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据 本发明实施例的在宿主文件中捆绑文件的装置中的一些或者全部部件的一些 或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或 者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样 的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者 多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信 号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并 且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施 例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求 的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元 件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借 助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列 举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬 件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可 将这些单词解释为名称。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号