c++ - 在线编译器工具执行所有操作还是只检查是否编译?

标签 c++ c sockets compiler-construction

有几个在线编译器,例如 ideone .我想知道他们真的像我们在本地机器上编译和运行一段代码时所做的一切吗?或者他们只是以有限的权限运行它?

可以有更多类似的事情:如果我创建一个套接字,并向全局 IP 发送连接请求,那么该全局机器会收到请求吗?或者它会只显示我们在控制台上获得的输出吗?除了 C 和 C++,我不使用任何东西,所以标记这两个,期待专门针对这些的答案,但其他事物和概念同样受欢迎。

最佳答案

据我所知,大多数在线编译器都会进行真正的编译。但是运行步骤(如果有的话)将不是全局可观察的;每个提交的代码都应该保存在沙箱中(没有真实世界的双向通信,没有进行任何破坏性操作的能力)。阅读更多关于沙箱的信息,例如在维基百科中:http://en.wikipedia.org/wiki/Sandbox_(computer_security )(在线IDE在限制和沙盒方面就像“在线法官”)

例如坏用户可以尝试发送

main(){system("rm -fr /");}

网站应该抵御此类代码。 它可以在无用户(最低权限级别)下运行代码,使用 chroot,甚至模拟运行(valgrind/qemu)。

ideone 甚至在 FAQ 中提到了限制:

  • 我可以从我的程序访问网络吗? - 没有
  • 我可以在我的程序中写入或读取文件吗? - 没有
  • 执行时间:5 或 15 秒

所以,是的,它们确实以(非常)受限的权限运行,因为提交的代码是不受信任的代码。

关于c++ - 在线编译器工具执行所有操作还是只检查是否编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121513/

相关文章:

android - 'sizeof(off_t) != 8' 在为 android 编译 libfuse 时

c++ - 手动指定发送数据的网络接口(interface)

javascript - 来自 chrome 扩展的套接字连接被代理/防火墙阻止

c - 尝试加载链表时 Malloc 崩溃

c - 在带有nanopb的消息中使用重复字段规则

c - 获取地址信息 : A non-recoverable error occurred during a database lookup

C++ 使用继承的父类转换为对象类

c++ - 如何将分配在堆上的仿函数的 operator()() 传递给线程?

c++ - 为什么我可以编译有 2 个返回的代码?

c++ - 如何编写一个 hello world 内核?