问题标签 [wasmtime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

windows - 在 Windows 10 中构建 wasmtime 失败

我尝试在 Windows 10 中构建wasmtime但失败了。

运行命令后cargo build --release,我收到错误消息:

找不到 sys/ioctl.h和pthread.h文件

我安装了MinGWCMakeLLVM。我是否需要安装其他与 Linux 相关的工具来构建它?

0 投票
1 回答
377 浏览

c - 使用 wasmtime 运行 wasm 文件时调用函数失败

Mozilla 分享了WASI以及如何使用Wasmtime运行 . wasm文件在他们的博客文章中。他们演示的编程语言是Rust

但是,我想在C中做同样的事情。

我已经下载了wasi-libc并尝试使用Clang构建一个“hello world”程序。

我在test.c中创建了两个函数:

使用以下命令构建它:

运行 wasm 文件以调用函数:

我未能使用输入参数调用该函数。

Rust 和 C 有什么区别?Rust 目前是构建 wasm lib 文件的唯一方法吗?

0 投票
1 回答
107 浏览

clang - 使用 wasi-libc 时 fopen 失败

我尝试在使用fopen时读取图像wasi-libc

使用 Clang 构建代码:

它返回 NULL。我该如何解决这个问题?

0 投票
1 回答
54 浏览

cmd - 无法在 cmd 上运行 wasm 模块。错误:无法运行主模块“demo.wasm”

嗨,我是编程新手,一般我只知道网络开发。所以我有兴趣使用 webassembly wasm、wasmp-pack、webpack、wasi 开发 rust,在这种情况下是 wasmtime 的运行时演示,但我卡在这里,严重的是我什至不知道从哪里开始,所以这是错误...

0 投票
1 回答
683 浏览

webassembly - 为什么 WebAssembly 是安全的,什么是线性内存模型

(1) 我听说 WebAssembly 的安全性是通过提供线性内存来实现的。我想知道这个线性内存包含什么?wasm 堆栈和堆是否位于此内存空间中?如果是,我认为 wasm 堆栈和胶水代码堆栈(例如,js python 等)是分开的,对吗?

(2) 我可以通过使用导入表来了解 wasm 的内存安全性。换句话说,wasm 函数不能调用线性内存之外的任何函数,因为它只能使用索引来调用导入的函数。除此之外,wasm 还提供哪些其他安全性?也许是来自上面的堆栈问题。

(3) 看起来 wasm 中也有控制流完整性。也就是说每个函数的返回地址都是固定的,不能在这个函数内部修改。这是一个正确的理解吗?

非常感谢!

0 投票
1 回答
94 浏览

node.js - WASM 中的环境检测:Web、Node.js 还是独立运行时?

运行 WebAssembly 模块的方式有很多种,除了 Web 之外,Node.js 可以加载 wasm 模块--experimental-wasm-modules,独立运行时如 wasmtime 和 lucet 也可以运行它。

那么如何检测 WASM 中的当前环境,是否可以对 wasm 模块应用限制,使其只能在特定网站上运行?

0 投票
1 回答
498 浏览

go - 如何使用字符串作为参数从 Go 调用 Rust 函数?

我一直在尝试将字符串传递给 Rust 函数(编译为 Wasm),但是据我所知,现在无法直接传递字符串,因为“str”不是“FFI 世界”中的类型(至少 rust 编译器是这么说的): = help: consider using `*const u8` and a length instead

所以我所做的就是将函数更改为这种形式(而不是使用简单的 &str 类型):

这意味着我需要一个指针和 u8 中字符串的长度。

但是,有人让我注意到 WASM 模块是沙盒的,因此它们不能像普通应用程序那样使用普通指针。因此,我必须使用这样的函数将内存分配到模块的线性内存中:

这是一个 JS 函数的例子,它使用了这样的 alloc 函数:

我的问题是我不知道如何将此函数转换为 Go,这是因为我被困在“var mem”行,原因如下:

  • 我在 Go 中找不到“instance.exports.memory.buffer”的等价物(实例是“*wasmtime.Instance”类型)。
  • 我不知道如何去做 Unit8Buffer 在 Go 中所做的事情。

关于 Wasm 内存的好读物:(https://radu-matei.com/blog/practical-guide-to-wasm-memory/#exchang-strings-between-modules-and-runtimes

0 投票
0 回答
125 浏览

assembly - 寄存器使用和 WASM 编译器

我在 x86_64 上使用 Ubuntu。我首先从 clang 生成未优化的 WebAssembly 代码。WebAssembly 代码被编译成机器代码wasmtimecranelift用作编译后端。

我正在做一个简单的矩阵乘法:

这是三个循环中第一个循环的机器代码

由 生成wasmtime。我找到了许多必要的说明,但我找不到起重机升降机的调用约定来需要这些说明。

汇编代码

  1. 我的问题主要是关于esi寄存器,编译器是否必须使用它来获取c使用esi. 的价值必须esi保留吗?不然为什么不直接用它来做cmp。如果是,为什么1ad我们使用 esi 来存储来自r14d哪个来自的0 eax?此外,0 值保存在 中eax,eax 也是非易失性寄存器吗?

  2. 1b0,如果我们直接cmp esi, r12d根据结果设置 esi 0 或 1,就不需要复杂的步骤了1ba——1c3对吧?

  3. 如果我使用优化的 WebAssembly 生成优化的机器代码

    我不认为cranelift本身提供了优化标志,我发现机器代码更短但也很难理解。有什么方法可以帮助我阅读优化的机器代码?而且,如果我的机器代码来自未优化的 wasm。根据我们刚才对这个for循环例子的分析,可以说我找到了wasm编译器cranelift的缺陷吗?

非常感谢你的帮助!我知道代码可能读起来不愉快,你可以放大页面看图片

0 投票
1 回答
52 浏览

sandbox - 主机可以选择将哪些系统调用传递给每个 webassembly 模块

在https://hacks.mozilla.org/2019/03/standardizing-wasi-a-webassembly-system-interface/中 Lin Clark 的部分谈话:

它还为我们提供了沙盒,因为主机可以逐个程序选择要传入的 wasi 核心函数——因此,允许哪些系统调用。这保持了安全性。

她说主机可以选择传递给每个wasm模块的系统调用。例如read()系统调用传递到module Awrite()系统调用到module B

它是在或其他运行时实现的wasmtimelucet?或者它只是一个没有在现实世界中实现的梦想?

0 投票
0 回答
126 浏览

rust - 在 Rust WebAassembly (wasmtime) 的主机导入函数中传递一个指针字符串作为参数

所以我在生成的 .wast 文件中有以下导入(免责声明:我自己没有编写 wasm 文件):

我需要在 Rust 中编写主机导入函数。我不能在 Rust 中使用 &str,而且导入需要 i32。我猜我需要传递一个指向字符串的指针,在 Rust 中定义?谁能指出我正确的方向?在 wasmtime 中完成的一些例子?

提前致谢!