浏览器如何保护过程内存免受WebAssembly编译的代码



根据"分析WebAssembly与本机代码"研究的性能,将WebAssembly代码编译到Chrome中的本机X86指令中。据我了解,可以创建WS代码,该WS代码将在随机地址中访问随机存储器。当然,如果WA试图访问不属于进程的内存,将会有Segfault。但是,与此同时,JS和WA在同一过程中运行,不是吗?Chrome如何保护JavaScript内存免受WebAssembly的影响?如果WS代码会找出内部JS结构的地址范围并将其修改怎么办?

WASM代码无法直接访问Physical内存,在此过程中,WASM引擎本身或其他任何地方都无法访问物理内存。它只能在其声明的"线性内存"数组中访问内存,就像访问一个大字节数组一样。

从范围访问此数组不会seg fault。取而代之的是,WASM执行将被一个所谓的陷阱中止,这是WASM级别的一种例外。引擎可以以任何方式实现界限检查。在32位体系结构上,通常是实际地址比较。在64个位体系结构上,引擎可以使用更有效的虚拟内存技术,这会导致硬件信号,然后发动机捕获并转换为陷阱。但是,在这种情况下,硬件故障是实现细节,而不是WASM代码可观察到的。

WebAssembly无法直接地址到任何过程内存中,而仅允许它读/写入预定的'线性内存'中的内存地址,WebAssembly Modules共享与他们的JavaScript主机。

所以不,WebAssembly无法在随机地址访问随机内存。

最新更新