浏览器如何保护进程内存免受 webassembly 编译代码的影响?
How browser protects process memory from webassembly compiled code?
根据"Analyzing the Performance of WebAssembly vs. Native Code"研究,webassembly代码在Chrome中被编译成原生x86指令。据我所知,可以创建 WS 代码来访问随机地址中的随机内存。
当然,如果 WA 试图访问不属于进程的内存,就会出现段错误。但是,同时,JS 和 WA 运行在同一个进程中,不是吗?
Chrome 如何保护 Javascript 内存不受 webassembly 影响?如果 WS 代码会找出内部 JS 结构的地址范围并修改它怎么办?
WebAssembly 无法直接寻址到任何进程内存,相反,它只允许读取/写入 pre-defined“线性内存”内的内存地址,webassembly 模块与其 JavaScript主机.
所以不,WebAssembly 不能访问随机地址的随机内存。
Wasm 代码无法直接访问物理内存,无论是在 Wasm 引擎内部还是进程中的其他任何地方。它只能访问其声明的 "linear memory" 数组内的内存,这就像访问一个大字节数组。
对该数组的越界访问不会seg-fault。相反,Wasm 执行将被 so-called 陷阱中止,这是 Wasm 级别的一种异常。引擎可以以任何他们喜欢的方式实现边界检查。在 32 位体系结构上,它通常是实际地址比较。在 64 位架构上,引擎可以使用更高效的虚拟内存技术,这会导致引擎捕获硬件信号并将其转换为陷阱。然而,这种情况下的硬件故障是一个实现细节,Wasm 代码无法观察到。
根据"Analyzing the Performance of WebAssembly vs. Native Code"研究,webassembly代码在Chrome中被编译成原生x86指令。据我所知,可以创建 WS 代码来访问随机地址中的随机内存。 当然,如果 WA 试图访问不属于进程的内存,就会出现段错误。但是,同时,JS 和 WA 运行在同一个进程中,不是吗? Chrome 如何保护 Javascript 内存不受 webassembly 影响?如果 WS 代码会找出内部 JS 结构的地址范围并修改它怎么办?
WebAssembly 无法直接寻址到任何进程内存,相反,它只允许读取/写入 pre-defined“线性内存”内的内存地址,webassembly 模块与其 JavaScript主机.
所以不,WebAssembly 不能访问随机地址的随机内存。
Wasm 代码无法直接访问物理内存,无论是在 Wasm 引擎内部还是进程中的其他任何地方。它只能访问其声明的 "linear memory" 数组内的内存,这就像访问一个大字节数组。
对该数组的越界访问不会seg-fault。相反,Wasm 执行将被 so-called 陷阱中止,这是 Wasm 级别的一种异常。引擎可以以任何他们喜欢的方式实现边界检查。在 32 位体系结构上,它通常是实际地址比较。在 64 位架构上,引擎可以使用更高效的虚拟内存技术,这会导致引擎捕获硬件信号并将其转换为陷阱。然而,这种情况下的硬件故障是一个实现细节,Wasm 代码无法观察到。