资讯专栏INFORMATION COLUMN

[译]什么是 WebAssembly table imports?

Java_oldboy / 1565人阅读

摘要:中的什么是在第一篇文章中,我介绍了可以导入的四中不同的类型。可能是以某种方式插入到内存中的恶意代码,可能嵌入到字符串中。是存在于内存之外的数组。如果模块想要调用这些函数,它将该索引传递给一个名为的操作。

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

这是系列文章第三篇:

使用 JavaScript 创建一个 WebAssembly 模块的实例。

WebAssembly 中的 Memory

什么是 WebAssembly table?

在第一篇文章中,我介绍了 WebAssembly 可以导入的四中不同的类型。

values

function

memory

tables

最后一个可能有点陌生。什么是 table import,它有什么用呢?

有时在程序中,你想要有一个变量指向一个函数,就像一个回调。然后你可以把它传递给其他的方法。

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

如果需要,以后可以将变量指向一个不同的函数。这应该是一个熟悉的概念。

在 web 页面中,所有的方法都是 JavaScript 对象而且由于它们是 JavaScript 对象,所以它们存在于 WebAssembly 内存之外的内存地址中。

如果我们想要一个指向其中一个函数的变量,我们需要把它的地址放在我们的内存中。

保证网页安全的一部分是保证内存地址的不可见。你不希望页面上的代码可以看到或操作这些内存地址。如果页面上有恶意代码,它可以使用修改内存来创建漏洞。

例如,它可能会更改你的内存地址,以指向不同的内存位置。

那么当你尝试调用这个函数的时候,你会加载攻击者给你的内存地址。

可能是以某种方式插入到内存中的恶意代码,可能嵌入到字符串中。

Tables 可能实现类似函数指针的东西,这样不容易受到这些攻击的影响。

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

这些引用包含内存地址,但由于它不在 WebAssembly 的内存中,WebAssembly 不能看到这些地址。

但它确实可以访问数组索引。

如果 WebAssembly 模块想要调用这些函数,它将该索引传递给一个名为call_indirect的操作。这样就可以调用函数了。

现在,Table 的用例非常有限。它被添加到用于支持函数指针的规范中,因为C/C++非常依赖函数指针。

所以,当前唯一可以使用table来引用的只有函数但是随着WebAssembly扩展的功能,例如,当添加对DOM的直接访问时,你可能将会看到Table上存储着其他的类型的引用,和除了call_indirect之外的操作。

About

Lin Clark

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84540.html

相关文章

  • []使用JavaScript创建一个WebAssembly模块的实例

    摘要:原文链接这是系列文章第一篇使用创建一个模块的实例。将会创建模块的实例。一旦模块实例化完成,主进程就会拿到返回的实例。如果创建一个实例,你还需要其它的参数。使用这些低级装备这些来构建实例。模块本身没有任何状态。 原文链接:https://fanmingfei.com/posts/... 这是系列文章第一篇: 使用 JavaScript 创建一个 WebAssembly 模块的实例。 W...

    elarity 评论0 收藏0
  • []WebAssembly 中的 Memory

    摘要:使用,您可以直接访问原始字节码这可能令人担忧。可以根据索引从中拿到字符串现在,很多人并不知道如何在中使用字节码。你需要将字节码转换为有用的内容,比如说字符串。通过防止浏览器级内存泄漏并提供内存隔离,使事情变得更安全。 原文链接:https://fanmingfei.com/posts/... 这是系列文章第二篇: 使用 JavaScript 创建一个 WebAssembly 模块的实...

    junnplus 评论0 收藏0
  • WebAssembly 初尝

    摘要:在当前阶段,仅仅只是字节码规范。如果都没有将代码编译为字节码的工具,要起步就很困难了。接下来要做的是使用将格式的代码转换为二进制码。运行文件,最后就能得到浏览器需要的真正的二进制码。 本文转载自:众成翻译译者:文蔺链接:http://www.zcfy.cc/article/1031原文:http://cultureofdevelopment.com/blog/build-your-fi...

    anonymoussf 评论0 收藏0
  • Webpack 4.0 发布:有哪些新特性?(

    摘要:有哪些新特性有哪些改进学着使用这个新版本,来构建更快的应用吧。继版本之后,花了将近八个月的时间来发布。的创始人之一,,建议用户使用,以便使用最优的性能,是因为源代码使用了新特性。全新的插件系统配备了全新整改的插件系统。 本文原文地址:https://auth0.com/blog/webpac...第一次翻译,不当之处,欢迎指正 官方已经发布了Webpack 4.0。有哪些新特性?有哪些...

    HitenDev 评论0 收藏0
  • 2017-08-01 前端日报

    摘要:前端日报精选掌握开发工具新一代前端开发技术和到底是咋回事第期深入浅出高阶组件基于的移动页面缓存解决方案译保护我们的,立刻停止狐步舞中文译中和之间的区别个人文章译什么是个人文章譯个人文章热身实战过渡与动画实现炫酷下拉, 2017-08-01 前端日报 精选 掌握Chrome开发工具:新一代前端开发技术exports、module.exports和export、export default...

    gclove 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<