眉头紧锁

2024-06-26 00:11:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我花了好几天时间研究这个看似简单的问题:在浏览器中运行C代码有可能吗?基本上,我在Appengine中建立了一个站点,它需要运行(一组受信任的)用户提供的一些C代码并运行它,然后将代码的输出返回给用户。从这里我有两个选择:要么我需要在浏览器中完全运行代码,要么想办法让Python在没有任何系统调用的情况下运行这个C代码。

我对我的问题的回答不一。我见过像Emscripten这样的解决方案,但这不起作用,因为我需要在浏览器中生成LLVM代码(我不能在AppEngine中运行编译器),但我将产生的输出太高,我无法使用codepad.org这样的服务,因为它们会修剪输出(我的输出将是大约20000行,每行60个字符,由于超时,codepad会修剪)。我的最后一个办法是制作我自己的服务器,可以满足我的Appengine站点的请求,但这似乎有点极端。

我的用户提供的代码将是非常简单的C。他们的代码不会调用I/O或系统操作。不幸的是,我可能无法简单地在代码中使用find/replace操作将其转换为Javascript,因为它们可能使用多维数组甚至类之类的结构。

我可以将我的用户限制在一个跨平台的浏览器上,例如Chrome或Firefox。有谁能帮我找到这个问题的解决办法吗?我困惑了好几天。


Tags: 代码用户站点系统时间情况浏览器解决方案
3条回答

老问题,但对于那些在2018年登陆这里的人来说,这将是值得一看的网络组装。

您可能想看看Google Native Client,它描述的是一个沙箱,用于在浏览器中有效地和安全地运行编译的C和C++代码,与用户的操作系统无关,允许基于Web的应用程序以接近本地的速度运行。 它还使用代码验证器来防止使用不安全的指令,如执行系统调用的指令。 本机客户机提供GNU工具链的定制版本,特别是GCC和binutils以及LLVM。

除了给出的官方链接外,您还可以查看Wikipedia article on Google NaCL,其中包含一些更有用的信息。

这是非常邪恶的,但是你的E.E>可以eMe>能够编译带有{En} C/C++的解释器。这将给你提供一个浏览器环境,可以解释(慢)C或C++程序。

不幸的是,cint声称支持解释代码和预编译代码的混合。这意味着它将要做emscripten不支持的事情,所以您必须破解它。

如果你愿意限制自己使用Chrome,你可能会发现通过NaCL插件系统编译cint更容易,因为这意味着你可以使用真正的x86工具链。但这不允许使用真正的编译器;NaCL不允许动态生成机器代码,因此tcc之类的系统将无法工作。不过,cint在这个平台上可能更容易移植。

相关问题 更多 >