无论您在哪里听到webassembly提供的隔离。他们告诉webassembly提供了细粒度的软件故障隔离。但它是如何提供隔离的呢?具有线性记忆?线性记忆是如何被隔离的?我找不到关于webassembly如何提供SFI(软件故障隔离(的资源。
在规范级别,"线性存储器";是WebAssembly程序可以通过其加载和存储指令访问的唯一空间。确保这是真的是WebAssembly VM的工作,只要它符合规范,它就可以以任何方式自由执行。在我工作的VM Wasmer中,进入线性内存的指针是从基指针偏移32位的,默认情况下,我们分配6GiB的虚拟地址,以便所有可能的指针访问都在线性内存内(从-2GiB到+4GiB,因此为6GiB(。其中一些地址被映射为不可访问,因此对它们的访问会导致Wasm规范所要求的陷阱。没有必要通过这种方式实现线性内存,您可以编写一个WebAssembly VM,它使用用于线性内存访问的哈希表(key=address,value=byte(,只要实现正确,任何程序都不应该知道。
关于SFI这个更广泛的话题,我在StackOverflow的其他地方回答了这个问题的变体。为什么WebAssembly是安全的,什么是线性内存模型。