根据“分析WebAssembly与本机代码的性能”研究,将Webassembly的代码编译为Chrome中的本机x86指令。据我了解,可以创建将访问随机地址中的随机存储器的WS代码。 当然,如果WA尝试访问不属于进程的内存,则会出现段错误。但是,JS和WA在同一时间运行,不是吗? Chrome如何保护Javascript内存免受Webassembly的侵害?如果WS代码将找出内部JS结构的地址范围并对其进行修改,该怎么办?
答案 0 :(得分:1)
WebAssembly不能直接寻址到任何进程内存中,而是只允许对预定义的“线性内存”中的内存地址进行读/写,而webassembly模块将其与JavaScript主机共享。
因此,WebAssembly无法访问随机地址处的随机内存。
答案 1 :(得分:1)
Wasm代码无法直接访问物理内存,无论是Wasm引擎本身内部还是进程中的其他任何地方。它只能访问已声明的“线性内存”数组中的内存,就像访问大字节数组一样。
对该数组的访问不属于seg-fault。取而代之的是,Wasm执行将被所谓的陷阱中止,这是Wasm级别的一种异常。引擎可以按照自己喜欢的任何方式实现边界检查。在32位架构上,通常是实际的地址比较。在64位体系结构上,引擎可以使用更有效的虚拟内存技术,从而导致引擎捕获并转化为陷阱的硬件信号。但是,这种情况下的硬件故障是实现细节,Wasm代码无法观察到。