Есть ли способ отключить функции system()
и exec()
в C/C++ и Pascal, используя любой аргумент компилятора или изменив файл заголовка/модуля? (это винда)
Я пытался использовать -Dsystem=NONEXIST
для gcc и g++, но #include <cstdio>
вызывает ошибку компиляции.
РЕДАКТИРОВАТЬ: Конечно, я знаю, что они могут использовать #undef system
для обхода защиты, поэтому я попытался закомментировать функциональную строку system
в stdlib.h, но это тоже не работает.
EDIT2 (комментарий): это система, в которой пользователи отправляют свои программы, а сервер компилирует и запускает их с различными входными данными, а затем сравнивает вывод программы с предварительно рассчитанным стандартным выводом, чтобы убедиться, что программа верна. Теперь некоторые пользователи отправляют код типа system("shutdown -s -t 0");
для выключения сервера.
Сервер работает под управлением системы Windows, поэтому у меня нет среды chroot. Кроме того, серверное приложение имеет закрытый исходный код, поэтому я ничего не могу сделать, чтобы контролировать выполнение программы, отправленной пользователем. Что я могу сделать, так это изменить аргумент командной строки компилятора и изменить файлы заголовков.
LD_PRELOAD
), вы можете использоватьLD_PRELOAD
для загрузки библиотеки, содержащей фиктивные заглушки для этих функций. - person Some programmer dude   schedule 02.11.2011system("shutdown -s -t 0");
для выключения сервера. - person hexchain   schedule 02.11.2011