本申请涉及计算机,尤其涉及一种代码编译方法、装置、系统、代码编译器和产品。
背景技术:
1、二进制翻译是指将一种架构的机器代码转换为另一种架构的机器代码的技术。在对代码进行翻译时需要对代码进行编译,在编译过程中通过对源代码进行静态扫描,获取代码入口点,然后基于代码入口点进行代码编译。
2、上述的编译方式通过对源代码文件进行静态分析实现代码编译,但是该编译方式通常无法准确分析源代码中的间接跳转,从而导致其代码扫描覆盖率不高,进而会导致代码翻译质量较差。
技术实现思路
1、针对上述技术问题,本申请提出一种代码编译方法、装置、系统、代码编译器和产品,能够提高aot编译的代码扫描覆盖率,从而有助于提高代码翻译质量。
2、本申请第一方面提出一种代码编译方法,包括:
3、加载源代码文件以及动态数据库,所述动态数据库中包括所述源代码文件在源平台运行时的运行过程记录;
4、通过对所述源代码文件进行代码入口点解析,以及,基于所述动态数据库识别所述源代码中的间接跳转对应的代码入口点,得到代码入口点集合。
5、在一些实现方式中,所述方法还包括:基于所述代码入口点集合,将所述源代码文件转换成目标代码文件,所述目标代码文件是适用于在目标平台运行的代码文件。
6、在一些实现方式中,通过对所述源代码文件进行代码入口点解析,以及,基于所述动态数据库识别所述源代码中的间接跳转对应的代码入口点,得到代码入口点集合,包括:
7、对所述源代码文件进行代码入口点解析,确定所述源代码文件中的潜在代码入口点;
8、从所述动态数据库中查询与所述源代码中的间接跳转指令对应的运行记录,确定所述源代码中的间接跳转对应的代码入口点;
9、基于确定的潜在代码入口点和所述间接跳转对应的代码入口点,继续对所述源代码文件进行代码入口点解析,得到代码入口点集合。
10、在一些实现方式中,从所述动态数据库中查询与所述源代码中的间接跳转指令对应的运行记录,确定所述源代码中的间接跳转对应的代码入口点,包括:
11、在对所述源代码文件进行代码入口点解析的过程中,当从所述源代码文件中解析到间接跳转指令时,从所述动态数据库中查询与所述间接跳转指令对应的运行记录;
12、在从所述动态数据库中查询到与所述间接跳转指令对应的运行记录的情况下,基于所述运行记录确定所述间接跳转指令的目的地址,并基于该目的地址确定所述间接跳转对应的代码入口点。
13、在一些实现方式中,当从所述源代码文件中解析到间接跳转指令时,从所述动态数据库中查询与所述间接跳转指令对应的运行记录,包括:
14、当从所述源代码文件中解析到间接跳转指令时,确定所述间接跳转指令在所述源代码文件中的地址;
15、根据所述间接跳转指令在所述源代码文件中的地址,从所述动态数据库中查询对应所述地址的代码运行记录。
16、在一些实现方式中,基于所述运行记录确定所述间接跳转指令的目的地址,并基于该目的地址确定所述间接跳转对应的代码入口点,包括:
17、基于所述运行记录确定所述间接跳转指令所指向的函数表的起始地址;
18、基于所述函数表的起始地址,以及所述源代码文件中的各个代码段的地址范围,确定所述间接跳转指令的目的地址;
19、将所述间接跳转指令的目的地址,确定为所述间接跳转对应的代码入口点。
20、在一些实现方式中,基于所述函数表的起始地址,以及所述源代码文件中的各个代码段的地址范围,确定所述间接跳转指令的目的地址,包括:
21、从所述函数表的起始地址开始,确定所述函数表中的各个函数的地址;
22、基于各个函数的地址,以及所述源代码文件中的各个代码段的地址范围,从所述各个函数中确定出跳转目标函数;
23、将所述跳转目标函数的地址,确定为所述间接跳转指令的目的地址。
24、在一些实现方式中,基于各个函数的地址,以及所述源代码文件中的各个代码段的地址范围,从所述各个函数中确定出跳转目标函数,包括:
25、针对每个函数,执行如下处理:
26、将该函数的地址与所述源代码文件中的各个代码段的地址范围进行对比;
27、若该函数的地址处于所述源代码文件中的任意代码段的地址范围内,则将该函数确定为跳转目标函数。
28、本申请第二方面提出一种代码编译装置,包括:
29、数据加载单元,用于加载源代码文件以及动态数据库,所述动态数据库中包括所述源代码文件在源平台运行时的运行过程记录;
30、代码解析单元,用于通过对所述源代码文件进行代码入口点解析,以及,基于所述动态数据库识别所述源代码中的间接跳转对应的代码入口点,得到代码入口点集合。
31、本申请第三方面提出一种代码编译器,包括:
32、存储器和处理器;
33、所述存储器与所述处理器连接,用于存储程序;
34、所述处理器,用于通过运行所述存储器中的程序,实现上述的代码编译方法。
35、本申请第四方面提出一种计算机程序产品,包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行上述的代码编译方法。
36、本申请第五方面提出一种代码编译系统,包括:
37、运行记录模块和代码编译模块;
38、所述运行记录模块,用于对源代码文件在源平台的运行过程进行记录,得到动态数据库;
39、所述代码编译模块与所述运行记录模块连接,用于执行上述的代码编译方法。
40、本申请提出的代码编译方法在进行代码编译的过程中,在加载源代码文件的同时,还加载包括源代码文件在源平台运行时的运行过程记录的动态数据库。然后,通过对源代码文件进行代码入口点解析,以及基于动态数据库识别源代码文件中的间接跳转对应的代码入口点,得到代码入口点集合,该步骤可以结合源代码文件在源平台运行时的运行过程记录,有效识别源代码中的间接跳转对应的代码入口点,从而能够在代码编译时准确、全面地识别源代码的运行路径,从而提高代码编译扫描覆盖率,进而有助于提高代码翻译质量。
1.一种代码编译方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
3.根据权利要求1或2所述的方法,其特征在于,通过对所述源代码文件进行代码入口点解析,以及,基于所述动态数据库识别所述源代码中的间接跳转对应的代码入口点,得到代码入口点集合,包括:
4.根据权利要求3所述的方法,其特征在于,从所述动态数据库中查询与所述源代码中的间接跳转指令对应的运行记录,确定所述源代码中的间接跳转对应的代码入口点,包括:
5.根据权利要求4所述的方法,其特征在于,当从所述源代码文件中解析到间接跳转指令时,从所述动态数据库中查询与所述间接跳转指令对应的运行记录,包括:
6.根据权利要求4所述的方法,其特征在于,基于所述运行记录确定所述间接跳转指令的目的地址,并基于该目的地址确定所述间接跳转对应的代码入口点,包括:
7.根据权利要求6所述的方法,其特征在于,基于所述函数表的起始地址,以及所述源代码文件中的各个代码段的地址范围,确定所述间接跳转指令的目的地址,包括:
8.根据权利要求7所述的方法,其特征在于,基于各个函数的地址,以及所述源代码文件中的各个代码段的地址范围,从所述各个函数中确定出跳转目标函数,包括:
9.一种代码编译装置,其特征在于,包括:
10.一种代码编译器,其特征在于,包括:
11.一种计算机程序产品,其特征在于,包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行如权利要求1至8中任意一项所述的代码编译方法。
12.一种代码编译系统,其特征在于,包括:
