webassembly 如何提供软件故障隔离

问题描述

无论你在哪里听到 webassembly 提供的隔离。他们告诉 webassembly 提供细粒度的软件故障隔离。但它如何提供隔离?线性记忆?线性内存是如何隔离的?我找不到有关 webassembly 如何提供 SFI(软件故障隔离)的资源。

解决方法

在规范级别,“线性内存”是 WebAssembly 程序可以通过其加载和存储指令访问的唯一空间。确保这是真的是 WebAssembly VM 的工作,只要它符合规范,它就可以以任何方式自由地做到这一点。在我工作的 VM 中,Wasmer,指向线性内存的指针是基指针的 32 位偏移量,默认情况下我们分配 6GiB 的虚拟地址,以便所有可能的指针访问都落在线性内存中(从 -2GiB 到 +4GiB ,因此为 6GiB)。其中一些地址被映射为不可访问,因此对它们的访问会导致 Wasm 规范要求的陷阱。没有必要以这种方式实现线性内存,您可以编写一个 WebAssembly VM,它使用哈希表进行线性内存访问(键=地址,值=字节),只要它正确实现,任何程序都不应该能够分辨。>

关于更广泛的 SFI 主题,我在 StackOverflow 的其他地方回答了这个问题的一个变体。 Why is WebAssembly safe and what is linear memory model .

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...