2010-10-10 73 views
4

我想創建一個子進程調用其他程序(用C++在UNIX中)。但是我想限制子進程不要調用system(),fopen()等(如果有的話,它會被終止)。預防子進程調用

如何做到這一點?

+0

我想創建一個程序設計競賽問題的簡單和個人年級的學生,因此,如果需要解決系統(),它會報告「非法的系統調用」或類似的東西。 – fushar 2010-10-10 12:48:53

+1

如果我沒有太大誤解,ejugde是開源的。也許你可以看看它是如何完成的? – 2010-10-10 12:55:53

回答

2

this可以幫助你。看來有一種方法可以通過ptrace處理子進程執行的不同事情。 HTH

0

棘手。如果這是Linux或BSD,則可以使用setrlimit(RLIMIT_NPROC, &lim)進行試驗。如果它嘗試創建一個進程,這不會終止該子進程,但會導致系統調用fork失敗。如果有更多的便攜式答案,不知道。

+0

所以,它仍然可以'exec' ... – 2010-10-10 13:24:14

+0

@Peter - 嗯,是的,這將是一個安全漏洞了。 Armen的答案可能會更好(假設它適用於要使用的操作系統)。 – aschepler 2010-10-10 13:27:08

1

假設你的子進程使用C庫做的系統調用,它是一個動態的可執行文件,您的系統使用ELF,你可以設置LD_PRELOAD來截獲你感興趣的函數庫。

做不到這一點,你可以做一個Valgrind工具。