[译]什么是 WebAssembly table imports?

原文链接: https://fanmingfei.com/posts/…

这是系列文章第三篇:

在第一篇文章中,我引见了 WebAssembly 能够导入的四中差别的范例。

  • values

  • function

  • memory

  • tables

末了一个能够有点生疏。什么是 table import,它有什么用呢?

偶然在顺序中,你想要有一个变量指向一个函数,就像一个回调。然后你能够把它传递给其他的要领。

《[译]什么是 WebAssembly table imports?》

在 C 语言中,这叫做函数指针。函数存在内存中。变量,函数指针,只是指向该内存地点。

《[译]什么是 WebAssembly table imports?》

假如须要,今后能够将变量指向一个差别的函数。这应该是一个熟习的观点。

《[译]什么是 WebAssembly table imports?》

在 web 页面中,一切的要领都是 JavaScript 对象而且由于它们是 JavaScript 对象,所以它们存在于 WebAssembly 内存以外的内存地点中。

《[译]什么是 WebAssembly table imports?》

假如我们想要一个指向个中一个函数的变量,我们须要把它的地点放在我们的内存中。

《[译]什么是 WebAssembly table imports?》

保证网页平安的一部分是保证内存地点的不可见。你不愿望页面上的代码能够看到或操纵这些内存地点。假如页面上有恶意代码,它能够运用修正内存来建立破绽。

比方,它能够会变动你的内存地点,以指向差别的内存位置。

那末当你尝试挪用这个函数的时刻,你会加载进击者给你的内存地点。

《[译]什么是 WebAssembly table imports?》

能够是以某种体式格局插进去到内存中的恶意代码,能够嵌入到字符串中。

Tables 能够完成相似函数指针的东西,如许不容易遭到这些进击的影响。

Table 是存在于 WebAssembly 内存以外的数组。它的值是对函数的援用。

《[译]什么是 WebAssembly table imports?》

这些援用包括内存地点,但由于它不在 WebAssembly 的内存中,WebAssembly 不能看到这些地点。

但它确切能够接见数组索引。

《[译]什么是 WebAssembly table imports?》

假如 WebAssembly 模块想要挪用这些函数,它将该索引传递给一个名为call_indirect的操纵。如许就能够挪用函数了。

《[译]什么是 WebAssembly table imports?》

如今,Table 的用例异常有限。它被添加到用于支撑函数指针的范例中,由于C/C++异常依靠函数指针。

所以,当前唯一能够运用table来援用的只要函数然则跟着WebAssembly扩大的功用,比方,当添加对DOM的直接接见时,你能够将会看到Table上存储着其他的范例的援用,和除了call_indirect以外的操纵。

About

Lin Clark

    原文作者:明非
    原文地址: https://segmentfault.com/a/1190000010434298
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞