2010-10-10 10 views
4

Je souhaite créer un processus fils appelant un autre programme (avec C++ sous Unix). Mais je veux restreindre le processus fils de ne pas appeler system(), fopen(), etc. (si c'était le cas, il serait terminé).Empêcher le processus enfant des appels système

Comment faire?

+0

Je veux créer une niveleuse simple et personnelle pour le problème de concours de programmation, donc si la solution appelle system(), il rapportera "Appel système illégal" ou quelque chose comme ça. – fushar

+1

Si je ne me trompe pas, ejugde est open-source. Peut-être pourriez-vous jeter un coup d'œil à la façon dont cela a été fait? –

Répondre

2

this pourrait vous aider. Il semble qu'il existe un moyen de gérer différentes choses qu'un processus enfant fait via ptrace. HTH

0

Tricky. Si c'est Linux ou BSD, vous pouvez expérimenter avec setrlimit(RLIMIT_NPROC, &lim). Cela ne mettra pas fin à l'enfant s'il tente de créer un processus, mais l'appel système fork échouera. Aucune idée s'il y a une réponse plus portable.

+0

Donc, il peut encore 'exec' ... –

+0

@Peter - Hm, oui, ce serait un trou de sécurité aussi. La réponse d'Armen est probablement meilleure (en supposant que cela fonctionne sur l'OS à utiliser). – aschepler

1

En supposant que votre processus enfant utilise la bibliothèque C pour faire les syscalls, il est un exécutable dynamique, et votre système utilise ELF, vous pouvez définir LD_PRELOAD à une bibliothèque qui intercepte les fonctions qui vous intéressent.

A défaut , vous pouvez faire un outil Valgrind.