一种MIPS系统代码的保护方法及设备与流程

文档序号:13287848阅读:481来源:国知局
技术领域本发明涉及计算机领域,尤其涉及一种无互锁流水线级的微处理器(英文:Microcomputerwithoutinterlockedpipelinestages,缩写:MIPS)系统代码的保护方法及设备。

背景技术:
MIPS是高效精简指令集计算机(英文:ReducedInstructionSetComputer,缩写RISC)体系结构中的一种。MIPS系统中程序地址空间有kuseg、kseg0、kseg1、kseg2。kuseg:0x00000000~0x7FFFFFFF,这些地址是用户可用的地址。在有MMU(MemoryManageUnit,内存管理单元)的机器里,这些地址将一概被MMU作转换。kseg0:0x80000000~0x9FFFFFFF,这些地址映射到物理地址是把最高位清零,就可以将它们映射到物理地址的0~512M。因为这种映射是很简单的,通常将kseg0称为“非转换的”地址区域,可以通过快速缓存(cache)存取这段地址的全部,因此kseg0区域始终是可读可写的。kseg1:0xA0000000~0xBFFFFFFF,这些地址映射到物理地址是把最高3位清零,因此与kseg0映射的物理地址一样,均为物理地址的0~512M。但kseg1是非cache存取的。kseg2:0xC0000000-0xFFFFFFFF,这段地址空间只能在核心态下使用并且要经过MMU才能转换成物理地址。在MIPS系统中,目前使用的方案是在bootloader(启动加载器)配置MIPS系统代码区域为可读不可写,通过kseg0区域绕过TLB(TranslationLookasideBuffer,即旁路转换缓冲)的只读保护将MIPS系统软件拷贝到MIPS系统代码区域中,最后跳转到MIPS系统代码区域中运行MIPS系统代码。在上述技术方案中,由于将MIPS系统代码拷贝到kseg0区域中,只需要把最高位清零,这些地址就会被映射到物理地址的0~512M,就会导致通过kseg0区域可以绕过TLB的保护,因此可以通过kseg0直接修改代码段,且修改动作不会被捕捉,不能真正保护MIPS系统代码。

技术实现要素:
本发明实施例提供一种MIPS系统代码的保护方法及设备,能够保护MIPS系统代码不被修改。为达到上述目的,本发明实施例采用的技术方案是,第一方面,提供一种无互锁流水线级的微处理器MIPS系统代码的保护方法,包括:将系统代码的物理内存的虚拟地址设置在除kseg0、kseg1外的虚拟内存区域内;所述系统代码的物理内存的物理地址在512M以上;将所述系统代码拷贝到所述虚拟内存区域内的指定区域,所述指定区域的首地址为编译时为所述系统代码编译的起始地址;跳转到所述起始地址执行所述系统代码;获取所述系统代码的属性信息,根据所述系统代码的属性信息计算旁路转化缓冲TLB表项,并更新原TLB表项为所述TLB表项,其中所述TLB表项的属性为只读。结合第一方面,在第一方面的第一种可能的实现方式中,所述属性信息包括所述系统代码的起始地址、所述系统代码的大小。结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述系统代码的属性信息计算TLB表项具体包括:根据所述系统代码的起始地址、所述系统代码的大小、输入输出IO空间大小以及其他内存空间大小计算所述TLB表项。结合第一方面,在第一方面的第三种可能的实现方式中,所述更新原TLB表项为所述TLB表项具体包括:将所述TLB表项、TLB重设函数拷贝到所述kseg0中预留的内存空间中;跳转到所述kseg0执行所述TLB重设函数,更新原TLB表项为所述TLB表项。结合第一方面,在第一方面的第四种可能的实现方式中,所述指定区域包含所述系统代码的代码段起始地址、所述系统代码的代码段空间大小、所述系统代码的数据段起始地址以及所述系统代码的数据段空间大小。结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述将所述系统代码拷贝到所述虚拟内存区域内的指定区域,具体包括:将所述系统代码的代码段拷贝到所述代码段起始地址开始的区域,将所述系统代码的数据段拷贝到所述数据段起始地址开始的区域。第二方面,公开了一种设备,包括:设置单元,用于将系统代码的物理内存的虚拟地址设置在除kseg0、kseg1外的虚拟内存区域内;所述系统代码的物理内存的物理地址在512M以上;拷贝单元,用于将所述系统代码拷贝到所述虚拟内存区域内的指定区域,所述指定区域的首地址为编译时为所述系统代码编译的起始地址;执行单元,用于跳转到所述起始地址执行所述系统代码;计算单元,用于获取所述系统代码的属性信息,根据所述系统代码的属性信息计算旁路转化缓冲TLB表项;更新单元,用于更新原TLB表项为所述TLB表项,其中所述TLB表项的属性为只读。结合第二方面,在第二方面的第一种可能的实现方式中,所述属性信息包括所述系统代码的起始地址、所述系统代码的大小。结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述计算单元具体用于,根据所述系统代码的起始地址、所述系统代码的大小、输入输出IO空间大小以及其他内存空间大小计算所述TLB表项。结合第二方面,在第二方面的第三种可能的实现方式中,所述更新单元具体用于,将所述TLB表项、TLB重设函数拷贝到所述kseg0中预留的内存空间中;跳转到所述kseg0执行所述TLB重设函数,更新原TLB表项为所述TLB表项。结合第二方面,在第二方面的第四种可能的实现方式中,所述指定区域包含所述系统代码的代码段起始地址、所述系统代码的代码段空间大小、所述系统代码的数据段起始地址以及所述系统代码的数据段空间大小。结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述拷贝单元具体用于,将所述系统代码的代码段拷贝到所述代码段起始地址开始的区域,将所述系统代码的数据段拷贝到所述数据段起始地址开始的区域。本发明提供一种MIPS系统代码的保护方法及设备,编译时,使所述系统代码的起始地址在除kseg0、kseg1外的虚拟内存区域内的指定区域,将系统代码的物理内存映射到除kseg0、kseg1外的虚拟内存区域。将所述系统代码拷贝到所述指定区域,跳转到所述指定区域的起始地址执行系统代码。进行TLB表项计算,并更新原TLB表项为计算获得的TLB表项,并将计算获得的TLB表项的属性设置为只读。由于kseg0、kseg1外的虚拟内存区域需要通过TLB表项才能映射为物理地址,且TLB表项的属性为只读,在除kseg0、kseg1外的虚拟内存区域内的MIPS系统代码不能被直接修改。因此,本发明提供的方法及设备使得攻击者无法直接修改代码,能够保护MIPS系统代码不被修改。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例1提供的MIPS系统代码的保护方法的流程示意图;图2为本发明实施例2提供的MIPS系统代码的保护方法的流程示意图;图3为本发明实施例2提供的MIPS系统代码的保护方法之前虚拟地址的分布示意图;图4为本发明实施例2提供的MIPS系统代码的保护方法后虚拟地址的分布示意图;图5为本发明实施例3提供的设备的结构框图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例1:本发明实施例提供一种MIPS系统代码的保护方法,如图1所示,所述方法包括以下步骤:101、将系统代码的物理内存的虚拟地址设置在除kseg0、kseg1外的虚拟内存区域内。其中,虚拟地址也可以称为程序地址。除kseg0、kseg1外的虚拟内存区域需要经过MMU的转化才能映射为物理地址。需要说明的是TLB里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。MMU将虚拟地址转化为物理地址时,需要依赖TLB才能快速将虚拟地址映射为物理地址。本发明实施例中,所述系统代码的物理内存的物理地址在512M以上,这是由于kseg0、kseg1可以不经过MMU的转化直接映射在0~512M的物理地址,因此需要保证系统代码的物理内存的物理地址在512M以上。另外,在编译时将系统代码的代码段数据段编译在所述虚拟内存区域内的指定区域。具体地,可以为所述系统代码编译一个代码段起始地址、一个数据段起始地址。其中,所述代码段起始地址为所述指定区域的首地址。可以在步骤101之前可以为所述系统代码编译一个代码段起始地址,之后进行步骤101时需要保证所述代码段起始地址在除kseg0、kseg1外的虚拟内存区域内。也可以先进行步骤101,再为所述系统代码编译一个在除kseg0、kseg1外的虚拟内存区域内的代码段起始地址。102、将所述系统代码拷贝到所述虚拟内存区域内的指定区域,所述指定区域的首地址为编译时为所述系统代码编译的起始地址。其中,所述指定区域包含所述系统代码的代码段起始地址、所述系统代码的代码段空间大小、所述系统代码的数据段起始地址以及所述系统代码的数据段空间大小。所述将所述系统代码拷贝到所述虚拟内存区域内的指定区域,具体可以是,将所述系统代码的代码段拷贝到所述代码段起始地址开始的区域,将所述系统代码的数据段拷贝到所述数据段起始地址开始的区域。103、跳转到所述起始地址执行所述系统代码。104、获取所述系统代码的属性信息,根据所述系统代码的属性信息计算旁路转化缓冲TLB表项,并更新原TLB表项为所述TLB表项,其中所述TLB表项的属性为只读。其中,所述系统代码的属性信息包括所述系统代码的起始地址、所述系统代码的大小。具体实现中,根据所述系统代码的起始地址、所述系统代码的大小、输入输出IO空间大小以及其他内存空间大小计算所述TLB表项。所述更新原TLB表项为所述TLB表项具体包括:将所述TLB表项、TLB重设函数拷贝到所述kseg0中预留的内存空间中;跳转到所述kseg0执行所述TLB重设函数,更新原TLB表项为所述TLB。本发明提供一种MIPS系统代码的保护方法,编译时,使所述系统代码的起始地址在除kseg0、kseg1外的虚拟内存区域内的指定区域,将系统代码的物理内存映射到除kseg0、kseg1外的虚拟内存区域。将所述系统代码拷贝到所述指定区域,跳转到所述指定区域的起始地址执行系统代码。进行TLB表项计算,并更新原TLB表项为计算获得的TLB表项,并将计算获得的TLB表项的属性设置为只读。由于kseg0、kseg1外的虚拟内存区域需要通过TLB表项才能映射为物理地址,且TLB表项的属性为只读,在除kseg0、kseg1外的虚拟内存区域内的MIPS系统代码不能被直接修改。因此,本发明提供的方法使得攻击者无法直接修改代码,能够保护MIPS系统代码不被修改。实施例2:本发明实施例提供一种MIPS系统代码的保护方法,如图2所示,所述方法包括以下步骤:201、编译时,将系统代码编译在除kseg0、kseg1外的虚拟内存区域内。图3所示,为本发明实施例提供的系统代码的保护方法之前虚拟地址的分布示意图。图4为本发明实施例提供的系统代码的保护方法之后虚拟地址的分布示意图。具体地,(参照图4)可以如下:编译所述系统代码的代码段的起始地址为0x00200000,编译所述系统代码的代码段空间大小为0x01080000,编译系统代码的数据段起始地址为0x01280000,编译系统代码的数据段空间大小为0x00200000。202、bootloader将所述系统代码的物理内存的虚拟地址设置在除kseg0、kseg1外的虚拟内存区域内;所述系统代码的物理内存的物理地址在512M以上。具体地,假设所述系统代码的物理内存的大小为512M,对应的物理地址为0x00000000-0x0FFFFFFF(低256M):内存低段地址,0x10000000-0x1FFFFFFF(256M-512M):IO空间,0x20000000-0x2FFFFFFF(512M-768M):内存高256M的地址。其中0~256M为内存低端地址,256M~512M为内存高段地址。bootloader下将256M-512M物理内存映射到0x00000000-0x0fffffff,将0到256M物理内存映射到0x10000000-0x1fffffff,均映射为可读可写。需要说明的是可以先进行步骤201,再进行步骤202。也可以先进行步骤202,再进行步骤201,在此不做限定。203、bootloader将所述系统代码拷贝到所述虚拟内存区域内的指定区域,所述指定区域的首地址为编译时为所述系统代码编译的起始地址。其中,所述指定区域包含所述系统代码的代码段起始地址、所述系统代码的代码段空间大小、所述系统代码的数据段起始地址以及所述系统代码的数据段空间大小。所述将所述系统代码拷贝到所述虚拟内存区域内的指定区域,具体可以是,将所述系统代码的代码段拷贝到所述代码段起始地址开始的区域,将所述系统代码的数据段拷贝到所述数据段起始地址开始的区域。示例地,将所述系统代码的代码段拷贝到0x00200000开始的区域,将所述系统代码的数据段拷贝到0x01280000开始的区域。204、所述系统代码获取自身的属性信息,根据所述系统代码的属性信息计算TLB表项。其中,所述系统代码的属性信息包括所述系统代码的起始地址、所述系统代码的大小。具体实现中,根据所述系统代码的起始地址、所述系统代码的大小、输入输出IO空间大小以及其他内存空间大小计算所述TLB表项。205、将所述TLB表项、TLB重设函数拷贝到所述kseg0中预留的内存空间中。206、跳转到所述kseg0执行所述TLB重设函数,更新原TLB表项为所述TLB。其中,所述TLB表项的属性为只读。本发明提供一种MIPS系统代码的保护方法,编译时,使所述系统代码的起始地址在除kseg0、kseg1外的虚拟内存区域内的指定区域,将系统代码的物理内存映射到除kseg0、kseg1外的虚拟内存区域。将所述系统代码拷贝到所述指定区域,跳转到所述指定区域的起始地址执行系统代码。进行TLB表项计算,并更新原TLB表项为计算获得的TLB表项,并将计算获得的TLB表项的属性设置为只读。由于kseg0、kseg1外的虚拟内存区域需要通过TLB表项才能映射为物理地址,且TLB表项的属性为只读,在除kseg0、kseg1外的虚拟内存区域内的MIPS系统代码不能被直接修改。因此,本发明提供的方法使得攻击者无法直接修改代码,能够保护MIPS系统代码不被修改。实施例3:本发明实施例提供了一种设备,如图5所示,包括设置单元301、拷贝单元302、执行单元303、计算单元304以及更新单元305。设置单元301,用于将系统代码的物理内存的虚拟地址设置在除kseg0、kseg1外的虚拟内存区域内;所述系统代码的物理内存的物理地址在512M以上。拷贝单元302,用于将所述系统代码拷贝到所述虚拟内存区域内的指定区域,所述指定区域的首地址为编译时为所述系统代码编译的起始地址。执行单元303,用于跳转到所述起始地址执行所述系统代码。计算单元304,用于获取所述系统代码的属性信息,根据所述系统代码的属性信息计算旁路转化缓冲TLB表项。更新单元305,用于更新原TLB表项为所述TLB表项,其中所述TLB表项的属性为只读。需要说明的是,所述属性信息包括所述系统代码的起始地址、所述系统代码的大小。所述计算单元304具体用于,根据所述系统代码的起始地址、所述系统代码的大小、输入输出IO空间大小以及其他内存空间大小计算所述TLB表项。所述更新单元305具体用于,将所述TLB表项、TLB重设函数拷贝到所述kseg0中预留的内存空间中;跳转到所述kseg0执行所述TLB重设函数,更新原TLB表项为所述TLB表项。需要说明的是,所述指定区域包含所述系统代码的代码段起始地址、所述系统代码的代码段空间大小、所述系统代码的数据段起始地址以及所述系统代码的数据段空间大小。所述拷贝单元302具体用于,将所述系统代码的代码段拷贝到所述代码段起始地址开始的区域,将所述系统代码的数据段拷贝到所述数据段起始地址开始的区域。本发明提供一种设备,编译时,使所述系统代码的起始地址在除kseg0、kseg1外的虚拟内存区域内的指定区域,将系统代码的物理内存映射到除kseg0、kseg1外的虚拟内存区域。将所述系统代码拷贝到所述指定区域,跳转到所述指定区域的起始地址执行系统代码。进行TLB表项计算,并更新原TLB表项为计算获得的TLB表项,并将计算获得的TLB表项的属性设置为只读。由于kseg0、kseg1外的虚拟内存区域需要通过TLB表项才能映射为物理地址,且TLB表项的属性为只读,在除kseg0、kseg1外的虚拟内存区域内的MIPS系统代码不能被直接修改。因此,本发明提供的设备使得攻击者无法直接修改代码,能够保护MIPS系统代码不被修改。本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1