具体实施方式
以下结合附图描述根据本发明实施例的方法,将会更好地理解本发明的目的和优点。
本发明实施例的保护内存中的应用程序的方法实现在提供解密加速功能的处理器上,图1示出根据本发明一个实施例对内存中应用程序提供保护机制的处理器架构图,利用专门由硬件电路单元构成的解密加速器对加密的应用程序代码进行解密,能够避免软件解密过程中可能带来的应用程序代码被破解或被读取的风险。本发明的核心思想是实现对内存中的应用程序可执行代码的保护,为需要特别保护的应用程序设置保护标记位,并对现有技术对内存中数据进行ECC(错误检查和纠正)校验的机制进行改进,有效识别出内存中应用程序的保护标记位,从而拒绝处理器的加载数据访问请求。
图2示出根据本发明的一个实施例在内存控制器中实现保护内存中的应用程序的方法,其中所述应用程序按照高速缓存行的大小被缓存为内存行,该方法包括以下步骤:在步骤S201,响应于处理器的加载访问请求,从内存中读取标记内存行和对应于所述内存行的ECC校验和,其中所述标记内存行是通过对所述内存行的预定位和用于标识所述内存行的标记位进行逻辑运算获得的;在步骤S202,利用所述ECC校验和对所述标记内存行执行ECC校验获得所述内存行的标记位的值;在步骤S203,根据标记位的值将所述标记内存行复原为所述内存行;以及在步骤S204,根据标记位的值和处理器的加载访问请求的类型确定是否加载所述内存行。
具体地,在步骤S201,响应于处理器的加载访问请求,从内存中读取标记内存行和对应于所述内存行的ECC校验和,其中所述标记内存行是通过对所述内存行的预定位和用于标识所述内存行的标记位进行逻辑运算获得的,图3示出根据本发明的一个实施例向内存中加载标记内存行和ECC校验和的过程,包括:
在步骤S301,响应于接收到处理器的应用程序加载请求,接收所述内存行和用于标识所述内存行的标记位。具体地,根据本发明的一个实施例,对于保护应用程序的情况,接收到处理器的加载应用程序的请求,DMA控制器将加密应用程序从硬盘加载到内存。解码加速器接收到处理器发出的解密控制指令,从解密控制指令中提取出加密的应用程序的内存地址;并从提取的内存地址读取加密的应用程序并解密;为解密的应用程序设置保护标记位,例如“1”,表示该应用程序需要保护;然后,将解密的应用程序每次按照高速缓存行(catcheline)的大小写入内存,例如,高速缓存行的大小是128byte,每次向内存写入128byte的应用程序代码,并存储为内存行,此外,为了有效记录标记位,在处理器与内存控制器之间的数据总线上额外增加一位记录标记位的数据线,因此在写入内存之前,多个内存行和对应的标记位被缓存在内存控制器中。而对于其它不需要保护的情况,实际并不需要添加额外的标记位,即默认为添加的非保护标记位为“0”。
在步骤S302,对所述内存行执行ECC编码产生对应于所述内存行的ECC校验和。内存是一种电子器件,在其工作过程中难免会出现错误,而对于稳定性要求高的用户来说,内存错误可能会引起致命性的问题,因此,服务器系统的内存通常通过ECC(错误检查和纠正)校验进行保护,从而将使整个服务器系统在工作时更趋于安全稳定,图4示出标记内存行和ECC编码产生的示例,其中b0,b1....b63是64比特的内存行,s位是为该内存行添加的标记位,利用现有技术中的ECC编码方法为每64比特指令数据b0,b1....b63产生8位单错纠正双错检测(SECDED)位,即,p0......p7。
在步骤S303,将所述内存行的预定位与标记位进行异或逻辑运算产生所述标记内存行。参照图4,其中在内存行b0,b1....b63中指定b0为的预定位,将b0与标记位s进行异或,产生内存行b0,b1....b63的标记内存行c0,c1.....c63。
在步骤S304,将所述标记内存行和对应于所述内存行的ECC校验和写入内存。
在完成向内存加载应用程序之后,处理器发出指令或数据的加载请求。具体地,在步骤S201,响应于接收到处理器的加载请求,内存控制器从内存中读取多个标记内存行和对应于所述多个内存行的ECC校验和,以图4为例,读取标记多个标记内存行c0,c1.....c63和多个对应于8位单错纠正双错检测(SECDED)位p0......p7。
在步骤S202,利用所述ECC校验和对所述标记内存行执行ECC校验获得所述内存行的标记位的值。具体地,对标记内存行进行ECC校验产生第一校验结果;对标记内存行的预定位进行非逻辑运算产生新标记内存行,其中标记内存行的预定位与产生标记内存行的预定位对应一致;对所述新标记内存行进行ECC校验产生第二校验结果;根据第一校验结果和第二校验结果获得对应于标记内存行的内存行的标记位的值。本领域技术人员可以理解,由内存行和标记位产生标记内存行并不限于逻辑或运算,而可以由任何具有恢复标记位的值的功能的逻辑运算来实现。
其中根据第一校验结果和第二校验结果确定对应于标记内存行的内存行的标记位的值,其中确定标记位的值的方法包括:如果第一校验结果表明所述标记内存行的预定位错误,并且第二校验结果表明所述新标记内存行未出错,那么确定标记位的值为保护标记位;如果第一校验结果表明所述标记内存行未出错,并且第二校验结果表明所述新标记内存行的预定位错误,那么确定标记位的值为非保护标记位;如果第一校验结果表明所述标记内存行出现两位错,并且第二校验结果表明所述新内存行中除预定位之外的1位出错,那么确定标记位的值为保护标记位;如果第一校验结果表明所述标记内存行中除预定位之外的1位出错,并且第二校验结果表明所述新标记内存行出现两位错,那么确定标记位的值为非保护标记位;以及如果第一校验结果和第二校验结果均表明内存行出现大于等于两位错,那么标记位的值呈现未知无法确定的状态。
根据本发明的一个实施例,在根据本发明实施例的方法确定每个内存行对应的标记位的值之后,为了避免由于传输的错误引起多于两个的误码,导致无法确定标记位的值,对于按照高速缓存行(cacheline)的大小一次写入的内存行,进一步根据多数判决的原理确定标记位的值,因为对于按照高速缓存行的大小每次写入内存的内存行,设置的标记位是相同的,因此对按照高速缓存行的大小一次写入的内存行依据多数判决的原理能够确定出正确的标记位的值。
图5示出对标记内存行执行ECC校验获得标记位的示例,首先,利用8位单错纠正双错检测(SECDED)位p0......p7对标记内存行c0,c1.....c63进行ECC校验,产生8位ECC第一校验结果A(A0......A7);接着对标记内存行c0,c1.....c63中的标记位c0进行非逻辑运算,即,使c0与“1”进行异或,产生新标记内存行d0,d1......d63;接着利用8位单错纠正双错检测(SECDED)位p0......p7对新标记内存行d0,d1.....d63进行ECC校验,产生8位ECC第二校验结果B(B0......B7)。由于ECC的单错纠正双错检测(SECDED)位能够能纠正1个比特错误和检测2个比特错误,因此根据ECC校验结果A0......A7和ECC校验结果B0......B7能够纠正1个比特错误和检测两个比特错误。结合A0......A7和B0......B7纠错和检错结果,确定标记位的值。
图6示出本发明一个实施例的根据第一校验结果A和第二校验结果B确定内存行的标记位的值的状态表,由表中可见包括五种情形,第一种情形,如果第一校验结果A表明标记内存行c0,c1.....c63的预定位b0出错,并且第二校验结果B表明内存行b0,b1....b63未出错,那么确定标记位s的值为保护标记位“1”;第二种情形,如果第一校验结果A表明内存行b0,b1....b63未出错,并且第二校验结果B表明内存行b0,b1....b63的预定位b0出错,那么确定标记位S的值为非保护标记位“0”;第三种情形,如果第一校验结果A表明两位错,并且第二校验结果B表明内存行b0,b1....b63除预定位b0之外有一位bx错,那么确定标记位s的值为保护标记位“1”;第四种情形,如果第一校验结果A表明内存行b0,b1....b63除预定位b0之外有一位bx错,并且第二校验结果B表明内存行b0,b1....b63有两位错,那么确定标记位s的值为非保护标记位“0”;第五种情形,对于第一校验结果和第二校验结果均表明内存行内存行b0,b1....b63出现大于等于两位错,那么标记位的值呈现未知无法确定的状态。
为了避免出现第五种情形,根据本发明的实施例,可以采用多数判决的方法确保标记位s的值的正确性,图7示出采用多数判决的方法确定标记位s的值的示例,假设高速缓存行的大小是32byte,因此一次向内存控制器写入的数据是32byte加上一个标记位,由此产生4个内存行,对于一次写入的32byte指令数据,标记位是相同的,因此在根据本发明实施例的方法确定每个内存行对应的标记位的值之后,根据多数判决的原理确定正确的标记位的值,如图7所示,根据各自内存行的第一校验结果A和第二校验结果B,分别得到四个标记位s的值,分别是1、1、0、1,通过多数判决确定标记位s的值是保护标记位“1”,从而避免由于传输的错误引起的多于两个的误码,导致无法确定标记位的值。
在步骤S203,根据标记位的值将所述多个标记内存行复原为所述内存行。根据图5的示例,预先确定保护标记位为“1”,而非保护标记位为“0”。在这种情形下,如果满足第一种情形,即第一校验结果A表明预定位d0出错,并且第二校验结果B表明未出错,那么确定标记位s的值为“1”,因此将c0进行非逻辑运算,复原出原来的内存行b0,b1....b63。如果满足第二种情形,即,第一校验结果A表明未出错,并且第二校验结果B表明预定位b0出错,那么确定标记位s的值为“0”,因此标记内存行c0,c1.....c63即为原来的内存行b0,b1....b63。如果满足第三种情形,即,第一校验结果A表明两位错,并且第二校验结果B表明除预定位b0之外的一位bx错,那么确定标记位s的值为“1”,因此将c0进行非逻辑运算,并且将cx进行非逻辑运算,从而复原出原来的内存行b0,b1....b63。如果满足第四种情形,即,第一校验结果A表明除预定位b0之外的一位bx错,并且第二校验结果B表明两位错,那么确定标记位s的值为“0”,因此标记内存行c0,c1.....c63即为原来的内存行b0,b1....b63,从而复原出原来的内存行b0,b1....b63。
在步骤S204,根据标记位的值和处理器的访问类型确定是否加载所述内存行。具体地,如果确定标记位的值为保护标记位并且处理器的访问类型为数据获取请求,则禁止将应用程序加载到数据缓存器(D-cache),从而实现了对应用程序的保护,防止应用程序被读取和破解;如果确定标记位的值为保护标记位并且访问类型为指令获取请求,则允许将应用程序加载到指令缓存器(I-cache),执行应用程序;如果确定标记位的值是非保护标记位并且访问类型为数据获取请求,则允许将应用程序加载到数据缓存器(D-cache);如果确定标记位的值是非保护标记位并且访问类型为指令获取请求,则允许将应用程序加载到指令缓存器(I-cache)。
基于同一发明构思,本发明提出一种保护内存中应用程序的内存控制器,图8示出根据本发明一个实施例的保护内存中应用程序的内存控制器的结构框图800,该内存控制器包括:读取模块801,被配置为响应于处理器的加载访问请求,从内存中读取标记内存行和对应于所述内存行的ECC校验和,其中所述标记内存行是通过对所述内存行的预定位和用于标识所述内存行的标记位进行逻辑运算获得的;ECC校验模块802,被配置为通过对所述标记内存行执行ECC校验获得所述内存行的标记位的值;复原模块803,被配置为根据标记位的值将所述标记内存行复原为所述内存行;加载判断模块804,被配置为根据标记位的值和处理器的加载访问请求的类型确定是否加载所述内存行。
所述内存控制器还包括:接收模块,被配置为响应于接收到处理器的应用程序加载请求,从解密加速器接收所述内存行和用于标识所述内存行的标记位;ECC编码模块,对所述内存行执行ECC编码产生对应于所述内存行的ECC校验和,其中ECC编码模块可以利用现有技术中的任何ECC编码硬件实现方案来实现;标记内存行产生模块,被配置为将所述内存行的预定位与标记位进行异或产生标记内存行;以及写内存模块,将所述标记内存行和对应于所述内存行的ECC校验和写入内存。
其中ECC校验模块进一步被配置为:对标记内存行进行ECC校验产生第一校验结果;对标记内存行的预定位进行非逻辑运算产生新标记内存行;对所述新标记内存行进行ECC校验产生第二校验结果;根据第一校验结果和第二校验结果获得所述标记内存行的标记位的值,ECC校验模块可以在现有的ECC校验电路的基础上加以实现。
根据本发明的一个实施例,如果第一校验结果表明所述标记内存行的预定位错误,并且第二校验结果表明所述新标记内存行未出错,那么确定标记位的值为保护标记位;如果第一校验结果表明所述标记内存行未出错,并且第二校验结果表明所述新标记内存行的预定位错误,那么确定标记位的值为非保护标记位;如果第一校验结果表明所述标记内存行出现两位错,并且第二校验结果表明所述新内存行中除预定位之外的1位出错,那么确定标记位的值为保护标记位;如果第一校验结果表明所述标记内存行中除预定位之外的1位出错,并且第二校验结果表明所述新标记内存行出现两位错,那么确定标记位的值为非保护标记位;以及如果第一校验结果和第二校验结果均表明内存行出现大于等于两位错,那么标记位的值呈现未知无法确定的状态。
根据本发明的一个实施例,进一步包括用于利用多数判决的原理确定所述内存行对应的标记位的值的确定模块。
根据本发明的一个实施例,其中加载判断模块进一步被配置为:如果确定标记位的值为保护标记位并且处理器的加载访问请求为数据获取请求,则禁止加载所述内存行;如果确定标记位的值为保护标记位并且处理器的加载访问请求为指令获取请求,则允许加载所述内存行;如果确定标记位的值为非保护标记位并且处理器的加载访问请求为数据获取请求,则允许加载所述内存行;如果确定标记位的值为非保护标记位并且处理器的加载访问请求为指令获取请求,则允许加载所述内存行,从硬件实现上,按照上述的加载逻辑增加控制逻辑电路来控制应用程序的加载,图9示出加载应用程序的硬件控制逻辑真值表,其中指令获取请求表示为“1”,数据获取请求表示为“0”,保护标记位表示为“1”,非保护标记位表示为“0”,可以看到只有在标记位的值为保护标记位,并且访问类型为数据获取请求时禁止加载应用程序,而其它情况则允许,图10示出加载应用程序的控制逻辑电路示意图,利用非门和与门组合的逻辑控制电路能够有效防止重要应用程序不会被读取或盗取。
本发明还提供一种保护内存中应用程序的处理器,该处理器集成有具有上述描述特性的内存控制器。
应当理解,本发明的至少某些方面可以可替代地以程序产品实现。定义有关本发明的功能的程序可以通过各种信号承载介质被传送到数据存储系统或计算机系统,所述信号承载介质包括但不限于,不可写存储介质(例如,CD-ROM)、可写存储介质(例如,软盘、硬盘驱动器、读/写CD ROM、光介质)以及诸如包括以太网的计算机和电话网络之类的通信介质。因此应当理解,在此类信号承载介质中,当携带或编码有管理本发明中的方法功能的计算机可读指令时,代表本发明的可替代实施例。本发明可以硬件、软件、固件或其组合的方式实现。本发明可以集中的方式在一个计算机系统中实现,或以分布方式实现,在这种分布方式中,不同的部件分布在若干互连的计算机系统中。适于执行本文中描述的方法的任何计算机系统或其它装置都是合适的。优选地,本发明以计算机软件和通用计算机硬件的组合的方式实现,在这种实现方式中,当该计算机程序被加载和执行时,控制该计算机系统而使其执行本发明的方法,或构成本发明的系统。
上面出于举例说明的目的,给出了本发明的优选实施例的说明。优选实施例的上述说明不是穷尽的,也不打算把本发明局限于公开的明确形式,显然鉴于上述教导,许多修改和变化是可能的。对本领域的技术人员来说显而易见的这种修改和变化包括在由附加的权利要求限定的本发明的范围内。