security - 浏览器如何保护进程内存免受 webassembly 编译代码的影响?
问题描述
根据“Analyzing the Performance of WebAssembly vs. Native Code”的研究,WebAssembly 代码在 Chrome 中被编译为原生 x86 指令。据我了解,可以创建 WS 代码来访问随机地址中的随机内存。当然,如果 WA 尝试访问不属于进程的内存,则会出现段错误。但是,同时,JS 和 WA 在同一个进程中运行,不是吗?Chrome 如何保护 Javascript 内存免受 webassembly 的影响?如果 WS 代码会找出内部 JS 结构的地址范围并对其进行修改怎么办?
解决方案
Wasm 代码不能直接访问物理内存,无论是在 Wasm 引擎本身内部还是在进程中的任何其他地方。它只能访问其声明的“线性内存”数组内的内存,这就像访问一个大字节数组一样。
越界访问此数组不会出现段错误。相反,Wasm 执行将被一个所谓的陷阱中止,这是 Wasm 级别的一种异常。引擎可以以他们喜欢的任何方式实现边界检查。在 32 位架构上,它通常是实际的地址比较。在 64 位架构上,引擎可以使用更有效的虚拟内存技术,这会导致引擎捕获硬件信号并将其转换为陷阱。但是,这种情况下的硬件故障是一个实现细节,并且无法通过 Wasm 代码观察到。
推荐阅读
- javascript - Move dynamically generated content to the top of the page on click. Vue.js
- automated-tests - Specflow+ tests don't appear in Resharper unit test explorer
- string - Split string in PowerShell by pattern
- mysql - mySQL 匹配日期,并在加入时返回 null
- python - Can I not use multiple Exceptions?
- python - 如何忽略所有 java.io 异常?
- ruby - 如何使用 capybara + minitest 断言两个选择器之一
- c# - 实例变量
- c# - Compare ListBox and list then print to Label
- node.js - 在快速路线中处理多个功能/场景的最佳方式?