gpt4 book ai didi

c - 使用 C 的子集进行语法检查

转载 作者:太空狗 更新时间:2023-10-29 15:41:00 24 4
gpt4 key购买 nike

我想构建一个基于 Web 的服务,让用户输入一些 C 代码,然后服务器将编译、运行并返回结果。我知道,我知道,安全噩梦。所以也许我可以使用 chroot 或 lxc 或类似的东西。 stackoverflow 上有关于这些的好帖子。另一种选择是使用编程竞赛软件。

不过,我所做的并不是一般的编程目的。用户将能够向一些 stub 函数添加代码,仅此而已。他们不需要能够使用指针、数组或字符串。他们不应该能够打开/关闭/读取/写入文件或套接字或共享内存。他们甚至无法创建自己的功能。他们应该只能执行以下操作:

// style comments
/* */ style comments
declare variables of type int, double, float, int64_t, int32_t, uint64_t, uint32_t
for, while, do
+, -, *, /, % arithmetic operators ( * as dereference is NOT allowed )
( )
+, - unary operators
++, -- operators
math functions like sin, cos, abs, fabs, etc
a bunch of API functions that will exist
switch, case, break
{ }
if, else, ==, !=
=, +=, -=, *=, /=, etc

有没有一种工具可以用来检查给定的 C 代码块,以确保它只包含这些元素?

如果我找不到现有的解决方案,我可以使用 Antlr 或类似的东西自己想出它。

最佳答案

有关运行用户代码的 Web 服务的真实示例,请查看 Travis CI持续集成服务。开源项目使用它以集中方式运行单元测试。 Travis 过程有点像这样:

  • 从已知良好的配置启动全新 VM。
  • 加载并编译用户代码。
  • 运行测试并显示结果。
  • 放弃虚拟机。

有一个时间限制(10 分钟 IIRC)来防止人们在系统上运行僵尸网络,但除此之外,虚拟机功能齐全并连接到互联网。无需限制语法或其他人为限制。

要牢记的一点是,无论您对用户施加多少限制,您都永远无法保护服务器免受用户代码的威胁。另一种方法是假设服务器在被用户代码访问时完全崩溃,然后将其丢弃,这就是 Travis 所做的。 VM 软件通常具有快照功能来帮助解决此类问题。

关于c - 使用 C 的子集进行语法检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com