繁体   English   中英

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

[英]Understanding Emscripten/ASM.js and the browser sandbox

很抱歉这里的基本问题。 我试图把头放在Emscripten,ASM.js周围,并将底层语言编译为javascript。

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

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

在我看来,与低级语言相比,在浏览器中运行的javascript是如此有限,以至于我看不到如何在不完全破坏js的情况下将任何有意义的应用程序简单地编译为js。

检查Emscripten文档 例如,它说:

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

但是,由于JavaScript具有事件驱动的特性,因此大多数持久性存储选项仅提供异步接口。 Emscripten提供了可以通过FS.mount()挂载的多个文件系统,以根据执行上下文帮助处理持久性。

如果向下滚动,您会发现:

记忆库

这是初始化运行时时安装在/的默认文件系统。 所有文件严格存在于内存中,并且在重新加载页面时,写入其中的所有数据都会丢失。

我相信这应该可以回答您的问题。 最终,Emscripten / ASM将尝试使用基于JavaScript的polyfill来模拟底层细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM