2011-11-14 52 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秒

所以,是的,他們確實與(非常)受限權限運行,因爲提交的代碼是不可信任的代碼。

相關問題