有几个在线编译器,如ideone。我想知道他们真的做了什么,比如我们在本地机器上编译和运行一段代码时发生了什么?或者只是用有限的特权运行它?在线编译器工具是否执行所有操作,或者只是检查它们是否编译?
可以有更多这样的事情:如果我创建一个套接字,并发送连接请求到全球IP,将全球机接收请求?或者它只是显示我们在控制台上得到的输出?除了C和C++以外,我不会使用其他任何东西,因此需要标记这两者,期待专门针对这些问题的答案,但其他的东西和概念同样受到欢迎。
有几个在线编译器,如ideone。我想知道他们真的做了什么,比如我们在本地机器上编译和运行一段代码时发生了什么?或者只是用有限的特权运行它?在线编译器工具是否执行所有操作,或者只是检查它们是否编译?
可以有更多这样的事情:如果我创建一个套接字,并发送连接请求到全球IP,将全球机接收请求?或者它只是显示我们在控制台上得到的输出?除了C和C++以外,我不会使用其他任何东西,因此需要标记这两者,期待专门针对这些问题的答案,但其他的东西和概念同样受到欢迎。
据我所知,大多数在线编译器会做一个真正的汇编。但运行步骤(如果有的话)将不是全球可观察的;每个提交的代码应保存在沙箱中(没有真实的双面通信,没有任何破坏性行为的能力)。详细了解沙盒,例如在wikipe:http://en.wikipedia.org/wiki/Sandbox_(computer_security)(在线IDE就像是在限制和沙盒)
例如术语“在线法官”不好的用户可以尝试发送
main(){system("rm -fr /");}
和网站应该从这样的代码辩护。 它可以在没有用户(最低权限级别)的情况下运行代码,使用chroot或甚至模拟运行(valgrind/qemu)。
的ideone甚至说,在有关限制的常见问题解答:
所以,是的,他们确实与(非常)受限权限运行,因为提交的代码是不可信任的代码。
为什么不试试? :-)我敢打赌,这些编译器不会有任何非标准库中可用,他们可能带出内嵌汇编... –
@KerrekSB:他们确实有一些可用的非标准库;例如,ideone和键盘都允许使用Boost库(尽管不是最新版本)。 –