一种数据处理方法及相关装置制造方法及图纸

技术编号:37149563 阅读:9 留言:0更新日期:2023-04-06 22:04
本申请公开了一种数据处理方法,应用于电子设备中。该方法包括:获取第一代码中待访问的目标常量数据,所述目标常量数据的长度大于预设阈值;根据第一代码中的目标函数所在的位置,在所述第一代码中插入多个数据传送指令,以得到第二代码,所述目标函数为需要访问所述目标常量数据的函数,所述多个数据传送指令中的每个数据传送指令分别包括所述目标常量数据中的部分数据,所述多个数据传送指令用于将所述目标常量数据写入寄存器中,所述第二代码被标记为存储至不具有读取权限的存储区域。基于本方法,能够在不影响程序正常运行的基础上,实现程序代码的安全性保护,有效保障计算机系统的安全以及避免程序代码的关键逻辑泄漏。漏。漏。

【技术实现步骤摘要】
一种数据处理方法及相关装置


[0001]本申请涉及计算机
,尤其涉及一种数据处理方法及相关装置。

技术介绍

[0002]基于处理器的内存管理单元和操作系统的内存管理,计算机系统普遍支持对应用程序不同组件的权限分离。一般来说,应用程序由代码段、数据段和只读数据段这三个组件构成。这三个组件位于内存中的不同地址范围内,且被操作系统赋予不同的权限以保证安全。例如,通过配置代码段不可写,能够防止恶意篡改程序代码;通过配置只读数据段不可写,能够防止只读数据被篡改;通过配置数据段不可执行,能够防止恶意代码注入攻击。
[0003]目前,通过内存管理单元或操作系统,能够强制一段内存不能同时具备写入权限和可执行权限,使得程序代码具备了防篡改的完整性保护。但是,对于程序代码的安全性保护,即程序代码只可执行不可读,目前没有通用的有效防御技术。然而,实现程序代码的安全性保护,是有效避免攻击者通过读取程序代码来对计算机系统进行攻击的重要手段。
[0004]因此,为了保障计算机系统的安全性,目前亟需一种能够实现程序代码安全性保护的方法。

技术实现思路

[0005]本申请提供了一种数据处理方法,能够在不影响程序正常运行的基础上,实现程序代码的安全性保护,有效保障计算机系统的安全以及避免程序代码的关键逻辑泄漏。
[0006]本申请第一方面提供一种数据处理方法,该方法应用于电子设备将程序源代码转换为程序可执行文件的过程中。该方法包括:电子设备获取第一代码中待访问的目标常量数据,所述目标常量数据的长度大于预设阈值。第一代码可以是指编译器对程序源代码文件进行编译得到的中间代码。在第一代码中,编译器还没有生成literal pool指令以及literal pool引用指令。其中,literal pool指令的值即为需要通过literal pool方式来访问的常量数据(即literal pool);literal pool引用指令用于访问literal pool指令的值,即指示访问literal pool。所述目标常量数据是指在常规编译过程中需要通过literal pool方式来访问的常量数据。
[0007]然后,电子设备根据第一代码中的目标函数所在的位置,在所述第一代码中插入多个数据传送指令,以得到第二代码。
[0008]其中,所述目标函数为需要访问所述目标常量数据的函数。所述多个数据传送指令中的每个数据传送指令分别包括所述目标常量数据中的部分数据,所述多个数据传送指令用于将所述目标常量数据写入寄存器中。具体地,所述多个数据传送指令中的每个数据传送指令均用于将其所携带的数据写入到寄存器中。例如,所述多个数据传送指令均可以为move指令。由于所述多个数据传送指令中的每个数据传送指令分别携带了目标常量数据中的部分数据,因此在依次执行多个数据传送指令之后,每个数据传送指令都将自身所携带的部分数据写入到寄存器中,最终使得寄存器中能够存储有所述目标常量数据。
[0009]此外,电子设备将插入多个数据传送指令后所得到的第二代码标记为存储至不具有读取权限的存储区域。通过将第二代码标记为存储至不具有读取权限的存储区域,可以避免攻击者恶意读取程序代码,有效保障计算机系统的安全以及避免程序代码的关键逻辑泄漏。
[0010]在一种可能的实现方式中,所述多个数据传送指令包括第一数据传送指令和第二数据传送指令,所述第一数据传送指令包括所述目标常量数据中的第一部分数据,所述第一数据传送指令用于将所述第一部分数据写入所述寄存器中,所述第二数据传送指令包括所述目标常量数据中的第二部分数据,所述第二数据传送指令用于将所述第二部分数据写入所述寄存器中,所述第一部分数据和所述第二部分数据不重合。
[0011]本方案中,由连续的第一数据传送指令和第二数据传送指令分别携带目标常量数据的一部分数据。这样电子设备在依次执行所述第一数据传送指令和所述第二数据传送指令时,可以先将第一部分数据写入寄存器中,然后再将第二部分数据写入寄存器中,从而使得寄存器中存储有完整的目标常量数据,保证了程序的正常运行。
[0012]在一种可能的实现方式中,第一代码中待访问的目标常量数据可能为浮点类型的数据。在计算机系统中,处理器在处理浮点数时,通常需要将浮点数从内存写入至专门的寄存器中,即将浮点数写入浮点寄存器中。
[0013]因此,为了保证能够将浮点数写入至浮点寄存器中,所述方法还包括:若所述目标常量数据为浮点型数据,则在所述第一代码中插入第三数据传送指令。其中,所述第三数据传送指令位于所述多个数据传送指令之后,所述多个数据传送指令用于将所述目标常量数据写入通用寄存器中,所述第三数据传送指令用于将写入所述通用寄存器的目标常量数据写入浮点寄存器中。
[0014]通过在多个数据传送指令之后插入用于指示将通用寄存器的目标常量数据写入浮点寄存器的第三数据传送指令,能够保证第一代码中待访问的浮点数能够被正常写入至浮点寄存器中,确保了程序的正常运行。
[0015]在一种可能的实现方式中,在所述第一代码中插入多个数据传送指令,包括:若所述目标常量数据为地址类型数据,则在所述第一代码中插入多个数据传送指令,并为所述多个数据传送指令添加标记,所述标记用于指示所述多个数据传送指令所传送的数据为地址类型数据。根据所述标记,生成重定位信息,所述重定位信息用于指示所述多个数据传送指令在所述第一代码中的位置。根据所述重定位信息,分别在多个数据传送指令中填入所述目标常量数据中的部分数据。
[0016]在第一代码中插入多个数据传送指令是由电子设备中的编译器在编译阶段所执行的。然而,在目标常量数据为地址类型数据的情况下,目标常量数据的值(即目标地址)只有在链接阶段才能确定下来,即编译器在编译阶段无法获取到目标常量数据的值。在这种情况下,编译器可以是在第一代码中插入多个数据传送指令,该数据传送指令并没有携带具体的目标常量数据的值。
[0017]在汇编阶段,汇编器根据编译器所生成的所述标记,生成重定位信息。所述重定位信息用于指示所述多个数据传送指令在目标文件的代码中的位置,其中目标文件是编译器对第一代码进行编译后得到的。具体地,重定位信息记录了位置信息,该位置信息指示了程序代码中在当前阶段无法确定的地址数据所在的位置。一般地,重定位信息中还记录了重
定位类型,不同的重定位类型对应于不同类型的地址信息和寻址方式。
[0018]在链接阶段,链接器可以基于汇编器所生成的重定位信息,确定所述目标常量数据的值,即确定了多个数据传送指令中需要填入的地址数据。然后,链接器根据重定位信息中所指示的位置,分别在多个数据传送指令中填入所述目标常量数据的部分数据。
[0019]本方案中,通过为多个数据传送指令添加标记,并生成对应的重定位信息,可以使得链接阶段能够基于重定位信息在多个数据传送指令中填入正确的地址数据,保证了目标常量数据为地址数据时,同样能够生成有效的程序代码。
[0020]在一种可能的实现方式中,所述根据第一代码中的目标函数所在的位置,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种数据处理方法,其特征在于,包括:获取第一代码中待访问的目标常量数据,所述目标常量数据的长度大于预设阈值;根据第一代码中的目标函数所在的位置,在所述第一代码中插入多个数据传送指令,以得到第二代码,所述目标函数为需要访问所述目标常量数据的函数,所述多个数据传送指令中的每个数据传送指令分别包括所述目标常量数据中的部分数据,所述多个数据传送指令用于将所述目标常量数据写入寄存器中,所述第二代码被标记为存储至不具有读取权限的存储区域。2.根据权利要求1所述的方法,其特征在于,所述多个数据传送指令包括第一数据传送指令和第二数据传送指令,所述第一数据传送指令包括所述目标常量数据中的第一部分数据,所述第一数据传送指令用于将所述第一部分数据写入所述寄存器中,所述第二数据传送指令包括所述目标常量数据中的第二部分数据,所述第二数据传送指令用于将所述第二部分数据写入所述寄存器中,所述第一部分数据和所述第二部分数据不重合。3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:若所述目标常量数据为浮点型数据,则在所述第一代码中插入第三数据传送指令;其中,所述第三数据传送指令位于所述多个数据传送指令之后,所述多个数据传送指令用于将所述目标常量数据写入通用寄存器中,所述第三数据传送指令用于将写入所述通用寄存器的目标常量数据写入浮点寄存器中。4.根据权利要求1

3任意一项所述的方法,其特征在于,在所述第一代码中插入多个数据传送指令,包括:若所述目标常量数据为地址类型数据,则在所述第一代码中插入多个数据传送指令,并为所述多个数据传送指令添加标记,所述标记用于指示所述多个数据传送指令所传送的数据为地址类型数据;根据所述标记,生成重定位信息,所述重定位信息用于指示所述多个数据传送指令在所述第一代码中的位置;根据所述重定位信息,分别在多个数据传送指令中填入所述目标常量数据中的部分数据。5.根据权利要求1或2所述的方法,其特征在于,所述根据第一代码中的目标函数所在的位置,在所述第一代码中插入多个数据传送指令,包括:根据第一代码中的目标函数所在的位置,生成文字池literal pool指令和literal pool引用指令,所述literal pool指令包括所述目标常量数据,所述literal pool引用指令用于访问所述literal pool指令中的所述目标常量数据;记录所述literal pool指令和literal pool引用指令的位置信息;根据所述位置信息,将所述literal pool指令和所述literal pool引用指令替换为所述多个数...

【专利技术属性】
技术研发人员:李坤张英骏
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1