本技术实施例涉及计算机,特别是涉及一种模式跳转方法、装置、电子设备及存储介质。
背景技术:
1、分层编译是通过编译策略对解释器和不同优化程度的即时编译器混合使用,以实现对解释型语言编写的程序的运行时优化。在此过程中,需要通过修改调用的目标地址,实现程序的执行模式在解释执行模式到即时编译模式的跳转,以及程序的执行模式在不同优化程度的即时编译模式之间的跳转。当需要通过修改多条指令实现对调用的目标地址修改时,修改过程中存在其他线程同时在执行调用目标地址的模式跳转操作,导致其他线程跳转到错误的地址。
技术实现思路
1、鉴于上述问题,本技术实施例提出一种模式跳转方法、装置、电子设备及存储介质,以便解决通过修改多条指令实现对调用的目标地址修改时,修改过程中其他线程跳转到错误的目标地址的问题。
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、可选的,所述第一指令序列包括多条调用指令;所述生成模块具体还用于:
41、对于任一目标调用指令,根据所述第一目标地址获取所述目标调用指令对应的目标子地址,所述目标调用指令是所述第二指令中的一条调用指令;
42、根据所述目标子地址对所述目标调用指令中的跳转子地址进行修改,得到修改后的目标调用指令;
43、将各所述修改后的目标调用指令确定为所述其他指令。
44、可选的,所述待执行模式为解释执行模式,所述获取模块具体用于:
45、在所述程序的执行模式从解释执行模式跳转到所述即时编译模式时,获取所述程序在所述即时编译模式下执行时对应的指令序列的存储地址,并将所述存储地址确定为所述第一目标地址。
46、可选的,所述待执行模式为即时编译模式,所述获取模块具体用于:
47、在所述程序的执行模式从即时编译模式跳转到所述解释执行模式时,获取所述程序在所述解释执行模式下执行时对应的指令序列的存储地址,并将所述存储地址确定为所述第一目标地址。
48、第三方面,本技术实施例提供一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
49、存储器,用于存放计算机程序;
50、处理器,用于执行存储器上所存放的程序时,实现如第一方面所述的模式跳转方法。
51、第四方面,本技术实施例提供一种存储介质,所述存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的模式跳转方法。
52、在本技术实施例中,由于程序为解释型语言编写的程序,因此,可以获取程序的源代码,并在不同的执行模式下通过对源代码进行解释执行或即时编译以执行程序,在程序进行执行模式跳转时,通过获取第一目标地址,根据第一目标地址以及当前模式跳转操作对应的第一指令序列,生成用于跳转到待执行模式对应的指令序列的第二指令序列,这样,在第二指令序列全部生成完毕之前,执行第一指令序列的其他线程可以不受影响,正常执行当前模式跳转操作,从而跳转到正确的目标地址,在第二指令序列生成完毕之后,由于第二指令序列包括最后生成的第一指令,第一指令存储于第一指令序列中第一条被执行的指令所在的位置,以使得第二指令序列全部生成完毕后,通过第一指令执行第二指令序列中的其他指令,这样,其他线程在执行到第一指令序列时可以通过执行第一指令跳转到第二指令序列,以执行第二指令序列中的其他指令,由于第二指令序列是根据第一目标地址生成的,第一目标地址为待执行模式对应的指令序列所在的地址,因此,可以通过执行第二指令序列中的其他指令跳转到待执行模式,可以避免跳转到错误的目标地址的问题,可以提高调用的目标地址的修改过程的安全性。