了解Emscripten/ASM.js和浏览器沙盒

Understanding Emscripten/ASM.js and the browser sandbox

本文关键字:浏览器 js Emscripten ASM 了解      更新时间:2023-09-26

很抱歉这里有一个基本的问题。我正试着把我的头绕在Emscripten, ASM.js和编译低级语言到javascript。

这是我不明白的地方。你可以在原生C程序中做一些你不能(也不应该)在基于浏览器的js中做的事情。例如,在本地应用程序中,您可以访问或文件系统或关闭计算机。

假设我写了一个C程序,读取/etc/passwd,然后关闭计算机。然后,我将该程序编译为js并将其弹出到<script>标记中。当我访问包含<script>标签的页面时会发生什么?显然,它不会关闭计算机,但它甚至可以编译吗?

在我看来,在浏览器中运行的javascript与低级语言相比是如此有限,我无法看到任何有意义的应用程序如何简单地编译成js而不完全破坏它。

查看Emscripten文档。例如,它说:

用Emscripten编译的应用程序通常需要同步I/O,所以Emscripten本身提供了完全同步的文件系统接口。

然而,由于JavaScript的事件驱动性质,大多数持久存储选项只提供异步接口。Emscripten提供可以使用FS.mount()挂载多个文件系统,以帮助处理与持久性取决于执行上下文。

如果你往下滚动,你会发现这个:

MEMFS

这是运行时挂载在/上的默认文件系统初始化。所有文件严格存在于内存中,所有写入的数据也严格存在于内存中当页面重新加载时,对它们的访问将丢失。

我相信这应该能回答你的问题。在一天结束时,Emscripten/ASM将尝试用基于javascript的填充来模拟低级细节。