一种原生API调用的方法及装置与流程

文档序号:35355073发布日期:2023-09-07 23:30阅读:27来源:国知局
一种原生API调用的方法及装置与流程

本说明书涉及计算机,尤其涉及一种原生api调用的方法及装置。


背景技术:

1、webassembly是一种能够将其他编程语言编译为浏览器可执行的二进制文件的技术。例如,为诸如c/c++等语言提供一个编译目标,以便它们可以在web上运行。也就是说,webassembly并不是一门编程语言,而是一份字节码标准,需要用高级编程语言编译出webassembly字节码放到虚拟机中才能运行。

2、目前,webassembly字节码在虚拟机上运行,没有直接访问计算机的本地资源(如磁盘、网络、文件系统等)的权限。并且,操作系统中的原生api通过操作系统的编程语言进行编写,不能转换为webassembly字节码,也不能在虚拟机的解释器中执行,从而,导致虚拟机无法直接调用原生api。

3、因此,如何通过webassembly字节码对原生api进行调用,则是一个亟待解决的问题。


技术实现思路

1、本说明书提供一种原生api调用的方法、装置、电子设备及机器可读存储介质,以通过webassembly字节码对原生api进行调用。

2、本说明书采用下述技术方案:

3、本说明书提供了一种原生api调用的方法,所述方法应用于电子设备上搭载的用于运行应用的虚拟机,所述虚拟机的内存空间中存储有由若干个原生api的信息组成的原生api注册表,所述原生api的信息包括:可执行代码地址、参数,包括:

4、在与目标应用的应用代码对应的webassembly字节码向所述虚拟机下载的过程中,判断所述目标应用调用的目标函数是否为原生api,如果是,将所述原生api注册表中的与所述目标函数对应的目标原生api的可执行代码地址写入到所述目标函数;

5、在所述目标应用调用目标原生api的过程中,将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈,以使所述电子设备上搭载的操作系统在与所述目标原生api的可执行代码地址上,按照所述系统栈中的所述目标原生api的参数的取值,执行所述目标函数,得到所述目标函数的返回值;

6、将所述系统栈中的所述目标函数的返回值拷贝到所述虚拟机栈中,执行所述目标应用。

7、可选地,所述电子设备包括:资源受限设备。

8、可选地,所述原生api的信息还包括:原生api标识;

9、在如果是,将所述原生api注册表中的与所述目标函数对应的目标原生api的可执行代码地址写入到所述目标函数之前,所述方法还包括:

10、如果是,判断所述原生api注册表中是否存在与所述目标函数的api标识相同的原生api标识;

11、如果是,判断所述原生api注册表中是否存在与所述目标函数的参数相同的原生api的参数。

12、可选地,在判断所述原生api注册表中是否存在与所述目标函数的api标识相同的原生api标识之前,所述方法还包括:

13、按照预设的校验算法,对所述原生api注册表中的原生api标识进行运算,得到所述原生api注册表中的原生api标识的运算结果;

14、判断所述原生api注册表中是否存在与所述目标函数的api标识相同的原生api标识,包括:

15、按照预设的校验算法,对所述目标函数的原生api标识进行运算,得到所述目标函数的原生api标识的运算结果;

16、判断所述原生api注册表中是否存在与所述目标函数的api标识的运算结果相同的原生api标识的运算结果。

17、可选地,在判断所述原生api注册表中是否存在与所述目标函数的参数相同的原生api的参数之前,所述方法还包括:

18、按照预设的校验算法,对所述原生api注册表中的原生api的参数进行运算,得到所述原生api注册表中的原生api的参数的运算结果;

19、判断所述原生api注册表中是否存在与所述目标函数的参数相同的原生api的参数,包括:

20、按照预设的校验算法,对所述目标函数的参数进行运算,得到所述目标函数的参数的运算结果;

21、判断所述原生api注册表中是否存在与所述目标函数的参数的运算结果相同的原生api的参数的运算结果。

22、可选地,所述虚拟机的内存空间包括:易失存储设备;

23、在判断所述目标应用调用的目标函数是否为原生api之前,所述方法还包括:

24、根据获取到的目标应用所需的原生api 的信息,对存储在所述易失存储设备中的原生api注册表进行修改,得到修改后的原生api注册表;

25、将所述原生api注册表中的与所述目标函数对应的目标原生api的可执行代码地址写入到所述目标函数,包括:

26、将所述修改后的原生api注册表中的与所述目标函数对应的目标原生api的可执行代码地址写入到所述目标函数。

27、可选地,所述虚拟机的内存空间包括:非易失存储设备,所述非易失存储设备中存储有所述原生api注册表。

28、可选地,所述原生api注册表由通过预设的数据结构连接的若干个子表组成,所述原生api注册表的子表中设置有子表标识。

29、可选地,在将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈之前,所述方法还包括:

30、获取所述目标应用的内存地址范围;

31、判断所述原生api的参数中是否存在指针类型的参数,如果是,判断所述指针类型的参数所在的内存地址是否超出所述目标应用的内存地址范围;

32、如果是,向所述目标应用返回错误信息;如果否,将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈。

33、可选地,将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈,包括:

34、根据所述目标原生api的参数的取值,计算所述目标原生api的参数在虚拟机栈的内存地址;

35、根据所述目标原生api的参数在虚拟机栈的内存地址,将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈。

36、本说明书提供了一种原生api调用的装置,所述装置应用于电子设备上搭载的用于运行应用的虚拟机,所述虚拟机的内存空间中存储有由若干个原生api的信息组成的原生api注册表,所述原生api的信息包括:可执行代码地址、参数,包括:

37、判断模块,用于在与目标应用的应用代码对应的webassembly字节码向所述虚拟机下载的过程中,判断所述目标应用调用的目标函数是否为原生api,如果是,将所述原生api注册表中的与所述目标函数对应的目标原生api的可执行代码地址写入到所述目标函数;

38、拷贝模块,用于在所述目标应用调用所述目标原生api的过程中,将虚拟机栈中的所述目标原生api的参数的取值拷贝到系统栈,以使所述电子设备上搭载的操作系统在与所述目标原生api的可执行代码地址上,按照所述系统栈中的所述目标原生api的参数的取值,执行所述目标函数,得到所述目标函数的返回值;

39、执行模块,用于将所述系统栈中的所述目标函数的返回值拷贝到所述虚拟机栈中,执行所述目标应用。

40、本说明书提供了一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;

41、所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述原生api调用的方法。

42、本说明书提供了一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述原生api调用的方法。

43、本说明书采用的上述至少一个技术方案能够达到以下有益效果:

44、在本说明书提供的原生api调用的方法中,虚拟机的内存空间中存储有由若干个原生api的信息组成的原生api注册表。在与目标应用的应用代码对应的webassembly字节码向所述虚拟机下载的过程中,判断目标应用调用的目标函数是否为原生api,如果是,将原生api注册表中的与目标函数对应的目标原生api的可执行代码地址写入到目标函数。然后,在目标应用调用目标原生api的过程中,将虚拟机栈中的目标原生api的参数的取值拷贝到系统栈,以使电子设备上搭载的操作系统在与目标原生api的可执行代码地址上,按照系统栈中的目标原生api的参数的取值,执行目标函数,得到目标函数的返回值。最后,将系统栈中的目标函数的返回值拷贝到虚拟机栈中,执行目标应用。从而,在虚拟机执行与目标应用的应用代码对应的webassembly字节码时,间接的对原生api进行调用。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1