2011-11-14 51 views
6

有几个在线编译器,如ideone。我想知道他们真的做了什么,比如我们在本地机器上编译和运行一段代码时发生了什么?或者只是用有限的特权运行它?在线编译器工具是否执行所有操作,或者只是检查它们是否编译?

可以有更多这样的事情:如果我创建一个套接字,并发送连接请求到全球IP,将全球机接收请求?或者它只是显示我们在控制台上得到的输出?除了C和C++以外,我不会使用其他任何东西,因此需要标记这两者,期待专门针对这些问题的答案,但其他的东西和概念同样受到欢迎。

+1

为什么不试试? :-)我敢打赌,这些编译器不会有任何非标准库中可用,他们可能带出内嵌汇编... –

+2

@KerrekSB:他们确实有一些可用的非标准库;例如,ideone和键盘都允许使用Boost库(尽管不是最新版本)。 –

回答

9

据我所知,大多数在线编译器会做一个真正的汇编。但运行步骤(如果有的话)将不是全球可观察的;每个提交的代码应保存在沙箱中(没有真实的双面通信,没有任何破坏性行为的能力)。详细了解沙盒,例如在wikipe:http://en.wikipedia.org/wiki/Sandbox_(computer_security)(在线IDE就像是在限制和沙盒)

例如术语“在线法官”不好的用户可以尝试发送

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

和网站应该从这样的代码辩护。 它可以在没有用户(最低权限级别)的情况下运行代码,使用chroot或甚至模拟运行(valgrind/qemu)。

的ideone甚至说,在有关限制的常见问题解答:

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

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

相关问题