C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用C的子集进行语法检查大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想构建一个基于Web的服务,让用户输入一些C代码,然后服务器将编译并运行并返回结果.我知道,我知道安全噩梦.所以也许我可以使用chroot或lxc或类似的东西. stackoverflow上有关于这些的好帖子.另一种选择是使用编程竞赛软件.

我所做的不是用于一般编程目的.用户可以将代码添加到几个存根函数中,就是这样.它们不需要能够使用指针或数组或字符串.它们不应该能够打开/关闭/读/写文件套接字或共享内存.他们甚至无法创建自己的功能.他们应该只能做以下事情:

// 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持续集成服务.开源项目使用它来集中运行单元测试.特拉维斯进程有点像这样:

>从已知良好的配置中启动一个全新的Vm.
>加载并编译用户代码.
>运行测试并显示结果.
>丢弃Vm.

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

要记住的一点是,无论用户限制多少,您都无法保证服务器免受用户代码的恐怖.另一种选择是假设服务器在被用户代码触及的时刻完全毁了,然后将其丢弃,这就是特拉维斯所做的事情. VM软件通常具有快照功能来帮助这类事情.

大佬总结

以上是大佬教程为你收集整理的使用C的子集进行语法检查全部内容,希望文章能够帮你解决使用C的子集进行语法检查所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。