Я занимаюсь разработкой многоплатформенного приложения C++ fuzzing. Приложение запускает дочерний процесс и проверяет, неожиданно ли оно остановилось. Я уже успел это сделать на linux, однако механизм обработки исключений Windows затрудняет мне работу.Исключение дочерних процессов в окнах
Мой код прямо сейчас делает следующее: - Позвоните CreateProcess, чтобы запустить процесс. - WaitForSingleObject, чтобы дождаться его завершения. - Затем вызовите GetExitCodeProcess и проверьте, соответствует ли код выхода исключению.
Все работает так, как должно быть, я протестировал его с помощью приложения для проверки правильности разыменования, и я могу извлечь исключение изящно. Тем не менее, каждый раз, когда я проверяю это, окно с сообщением об ошибке Windows сообщает, что я посылаю или не отправляю отчет об ошибке. Поскольку предполагается, что fuzzer является автоматическим тестовым приложением, мне нужно как-то отключить это уведомление, так что даже если будет обнаружено исключение, fuzzer может продолжить тестирование.
Я уже пытался установить обработчик SEH, но не повезло (очевидно, эти обработчики не унаследованы дочерними процессами). Я прочитал что-то об использовании векторной обработки исключений, но предположим, что это будет одно и то же, я считаю, что векторные обработчики не наследуются.
Может ли кто-нибудь помочь мне с этой проблемой? Я не знаю, что искать, я уже много гугл и не нашел ничего.
Спасибо!
Спасибо за ответ! Я думал об использовании некоторого отладочного API, но думал, что некоторые приложения, которые используют некоторые механизмы отладки, чтобы избежать взлома и/или уважения, могут изменить их поведение, если обнаруживают, что они отлаживаются fuzzer. Я полагаю, что если я не могу найти другой вариант, тогда мне придется использовать этот механизм отладки. – mfontanini 2010-11-30 14:34:28
тем более разумно стрелять в людей, которые пытаются перепроектировать свой код. – 2010-11-30 14:44:30