在浏览器中运行C语言
我花了好几天时间研究一个看似简单的问题:在浏览器中运行C代码到底可不可以?简单来说,我在Appengine上搭建了一个网站,需要运行一些由(可信的)用户提供的C代码,并把代码的输出结果返回给用户。我现在有两个选择:要么在浏览器中完全运行这些代码,要么找到一种方法让Python在没有任何系统调用的情况下运行这些C代码。
对于我的问题,我看到的回答各不相同。有些解决方案,比如Emscripten,但这不适用,因为我需要在浏览器中生成LLVM代码(我不能在AppEngine上运行编译器)。我尝试过各种方法,包括从codepad.org的输出页面抓取数据,但我产生的输出量太大,无法使用像codepad.org这样的服务,因为它们会截断输出(我的输出大约有20,000行,每行大约60个字符,codepad由于超时会截断这些输出)。我最后的选择是搭建自己的服务器来处理来自Appengine网站的请求,但这似乎有点过于极端。
用户提供的代码会非常简单,没有输入/输出或系统操作。不幸的是,我可能不能简单地用查找/替换的方法把他们的代码转换成JavaScript,因为他们可能会使用像多维数组或者甚至类这样的结构。
我可以接受限制用户使用一个跨平台的浏览器,比如Chrome或Firefox。有没有人能帮我找到这个问题的解决方案?我已经困惑了好几天。
3 个回答
这听起来有点复杂,但简单来说,你可能可以用一个叫做emscripten的工具,把
不过,
如果你愿意只在Chrome浏览器上使用,可能会发现通过NaCL插件系统编译
你可以看看谷歌的Native Client。简单来说,它是一个可以在浏览器里高效且安全地运行编译好的C和C++代码的环境。这个环境不受用户操作系统的限制,让网页应用可以接近原生应用的速度运行。它还使用了一种代码验证器,来防止使用一些不安全的指令,比如那些会进行系统调用的指令。Native Client还提供了定制版本的GNU工具链,特别是GCC和binutils,还有LLVM。
除了官方链接,你还可以看看维基百科上关于谷歌Native Client的文章,里面有更多有用的信息。
这个问题虽然老旧,但对于2018年找到这里的人来说,了解一下Web Assembly是很有价值的。