2012-12-27 22 views
2

我試圖寫一個簡單的判斷,將編譯和執行用戶提交的C文件。我在這裏找到了libsandboxquestion我如何開始使用libsandbox

我已經安裝了Python模塊,並按照指示我試圖運行C語言編寫的

➜ sandbox git:(V_0_3_x) ✗ ./hello        
Hello World%                 
➜ sandbox git:(V_0_3_x) ✗ python sample2.py hello 
result: RF 
cpu: 2ms 
mem: 288kB 

正如你所看到的,當我在沙箱我不運行程序的Hello World程序沒有任何輸出。如果有人能告訴我如何正確使用它,那會很棒。

回答

2

libsandbox示例代碼禁止進行文件操作的系統調用,如open()stat()close()。也就是說,您需要(1)鏈接世界您好計劃靜態,以避免打開文件,如共享庫(即libc.so),或(2)寫一個自定義的沙箱政策,允許相關的系統調用。定製沙盒策略的一些示例可在https://github.com/liuyu81/TR-OJA-201209A找到。

免責聲明:我的libsandbox作者。

+0

謝謝,我記得下探您發送電子郵件的某個時候回來。我不知道我們必須靜態鏈接東西,因此'RF'。現在全部排序。 – nikhil

1

射頻結果代碼很可能是由於對文件操作意想不到的系統調用(即SYS_OPEN(),SYS_CLOSE(),SYS_stat(),...)。當(1)目標程序實際執行文件操作時,以及(或)當(2)它是動態鏈接的並需要在運行時加載.so庫時,會發生這種情況。由於你的目標程序沒有調用文件操作,它屬於後一種情況。

然後,爲了解決RF結果,要麼,

靜態鏈接目標程序,以避免對共享庫的依賴關係;或者, 擴展包裝腳本中的策略規則以處理相關的SYSCALL/SYSRET事件;

對於我們使用前0,1,2三SYS_READ 1 sys_exit等經過鏈接查看更多細節的系統調用代碼靜態鏈接的系統調用鏈接系統調用表的代碼:http://docs.cs.up.ac.za/programming/asm/derick_tut/syscalls.html

我更改此設置:

x86_64=set([0,1,5,8,9,10,11,12,16,21,25,63,89,158,219,231]) 

此:

x86_64=set([0,1,2,3,4,5,8,9,10,11,12,16,21,25,63,89,158,219,231,]) 
在sample2.py

,和它的工作原理。

修改sample2.py是我的github庫鏈接可供選擇: https://github.com/palashmaran/libsandbox.git