首页 > 解决方案 > 浏览器如何保护进程内存免受 webassembly 编译代码的影响?

问题描述

根据“Analyzing the Performance of WebAssembly vs. Native Code”的研究,WebAssembly 代码在 Chrome 中被编译为原生 x86 指令。据我了解,可以创建 WS 代码来访问随机地址中的随机内存。当然,如果 WA 尝试访问不属于进程的内存,则会出现段错误。但是,同时,JS 和 WA 在同一个进程中运行,不是吗?Chrome 如何保护 Javascript 内存免受 webassembly 的影响?如果 WS 代码会找出内部 JS 结构的地址范围并对其进行修改怎么办?

标签: securityheap-memorywebassembly

解决方案


Wasm 代码不能直接访问物理内存,无论是在 Wasm 引擎本身内部还是在进程中的任何其他地方。它只能访问其声明的“线性内存”数组内的内存,这就像访问一个大字节数组一样。

越界访问此数组不会出现段错误。相反,Wasm 执行将被一个所谓的陷阱中止,这是 Wasm 级别的一种异常。引擎可以以他们喜欢的任何方式实现边界检查。在 32 位架构上,它通常是实际的地址比较。在 64 位架构上,引擎可以使用更有效的虚拟内存技术,这会导致引擎捕获硬件信号并将其转换为陷阱。但是,这种情况下的硬件故障是一个实现细节,并且无法通过 Wasm 代码观察到。


推荐阅读