有幾個在線編譯器,如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庫(儘管不是最新版本)。 –