Построение отладчика Linux C

#c #linux #debugging

#c #linux #отладка

Вопрос:

Пытаюсь создать отладчик на C для фаззинга.

В принципе, в Linux я просто хочу запустить процесс с помощью fork, а затем execve() , затем отслеживать этот процесс, чтобы увидеть, произойдет ли сбой через 1 секунду.

В Linux это делается путем создания процесса, а затем мониторинга сигналов, которые он генерирует, для всего, что выглядит как сбой? Или речь идет о мониторинге приложения и? Я не уверен.

Ответ №1:

Используйте ptrace(2) системный вызов:

Во время отслеживания дочерний элемент будет останавливаться каждый раз, когда поступает сигнал, даже если сигнал игнорируется. (Исключением является SIGKILL, который имеет свой обычный эффект.) Родительский процесс будет уведомлен при следующем ожидании (2) и может проверять и изменять дочерний процесс, пока он остановлен. Затем родительский элемент заставляет дочерний элемент продолжить, необязательно игнорируя доставленный сигнал (или даже вместо этого доставляя другой сигнал).

Сигналы, которые вас должны заинтересовать в отношении сбоя процесса, — это SIGSEGV (ограниченный доступ к памяти), SIGBUS (невыровненный доступ к данным), SIGILL (незаконная инструкция), SIGFPE (незаконная операция с плавающей запятой) и т. Д.