![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.11.2009
Сообщений: 7
|
![]()
Пишу небольшую системку для проверки решений задач учеников. Т.е. ученики посылают в систему файл на паскале/C++/Jav'e, система компилирует и выдает ответ - правильно или нет решена задача (напоминает правила олимпиад по программированию ACM).
Я знаком с большинством нынешних тестирующий систем, к сожалению они далеки от идеала или же как МГУшная системы ejudje - очень сложна в настройках. Поэтому и решено было написать свою. На данный момент стоят вопросы: 1. об определении есть ли в кодже ученика ассемблерная вставка. 2. как убивать выполняемое решение ученика по истечению определенного промежутка времени, т.е. если программа ученика написано не оптимально и долго работает, то завершать её автоматически и выдавать ответ что превышено время исполнения 3. Как ограничить программу по памяти, дав ей, к примеру, не более 64Мб. На этом моменте я застрял, помогите пожалуйста... |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
1. Ищи распространенные коды асемблера типа mov или регистры - там ax или sp.
2. По строжевому таймеру, единственная проблема - это критерий когда программа считается завершенной. Таймер периодически проверяет наступление опредленного момента времени и по его наступлении проверяет критерий завершения программы.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#3 | |
Регистрация: 02.11.2009
Сообщений: 7
|
![]() Цитата:
Тут же возник еще вопрос: Парсинг кода это дело простое. Но что если в файле будет обфусцированный код. Возможно ли скрытие реализации ассемблерных вставок ? Если не возможно, то моя задача сводится к парсингу файла и поска в нем зарезервированных слов в зависимости от ЯП ? К примеру для Delphi/Pascla ищу вставки MOV, для GCC ищу __mov__ и т.д. Так ли это ??? |
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
![]() В Делфи можно искать слово asm к примеру. Если сможете договориться с Делфи, то можно читать его отчет о компиляции (у Вас же будут исходники?), а он может рассказать много интересного (например предупреждение об обращении по индексу - так можно отловить типичный способ получения управления в кучу).
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 03.11.2009 в 09:12. |
|
![]() |
![]() |
![]() |
#5 |
Участник клубаДжуниор
Регистрация: 23.08.2008
Сообщений: 1,616
|
![]()
Каждая ASM вставка начинается со слова asm.
Код:
pushl $0x18E3DF6B
call ICQ Последний раз редактировалось Stilet; 03.11.2009 в 11:03. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Все правильно, ассемблерной вставки нету
![]()
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#7 |
Регистрация: 02.11.2009
Сообщений: 7
|
![]()
ОК, спасибо.
Так и сделал - парсинг исходника на предмет вхождения "asm" Но дети сейчас идут очень талантливые, юные хакеры так и наровят нагадить. Предполагается что дети будут сдавать решения удаленно, т.е. без присутствия учителя. Скомпилированное их решение будет запускаться на сервере. Смысл в том чтобы не погубить сервер решением детей. Какие основные моменты надо при этом усмотреть ? |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Антивирус. Пусть твой сервак отправляет скомпилированное дело на какой-нить сайт по проверке вирусов.
И потом можно парсить, некоторые функции ВинАпи - например запуск сторонней программы, выполнение команд в ShellExcecute и пр. Просто припугни их, что если будет какая-нибудь вредность от их программы, то студента ждет уголовная ответственность или отчисление в Армию.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#9 |
Регистрация: 02.11.2009
Сообщений: 7
|
![]()
По условию решение ученика читает данные из файла input.txt и пишет в файл output.txt
Для каждой задачи есть набор тестов. Т.е. скомпилированному решению ученика даются по очереди тесты от 1 до N. Есть чекер - программа для проверки данных в выходном файле. Как запустить этот чекер для всех тестов ? Напрашивается решение для компиляции решения ученика и копирования в папку с этим решением по очереди файлов input.txt, затем выполнение скомпилированного решения и проверка с помощью чекера. Возможно ли обойтись без такого копирования ? |
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Ну всю работу можно свалить на студента, пусть ему дали один общий файл, а он выдирает каждый раз нужное задание из файла и решение добавляет в конец выходного. Естественно сразу договориться об оформлении, чтобы было ясно где чьи лапы и хвосты.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тестирующая\обучающая программа | Gustaf | Помощь студентам | 9 | 25.05.2009 17:55 |
Тестирующая программа "КРИВЫЕ ВТОРОГО ПОРЯДКА" | ivp88 | Помощь студентам | 3 | 13.03.2007 11:47 |
Тестирующая прога | KlErik | Общие вопросы Delphi | 1 | 30.01.2007 10:06 |