C C  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

GDB и санитайзеры

Тест проверяет практическое расследование дефектов: точки остановки и стек GDB, отчёты ASan/UBSan, минимизацию входа, аварийный дамп и ограничения динамических инструментов.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 6 темам.
Вопрос 1 из 30
Как остановиться только когда `i==997`?
CСеанс GDB
(gdb) break process_item if i == 997
Вопрос 2 из 30
Чем точка наблюдения данных отличается от обычной точки останова?
CСеанс GDB
(gdb) watch state->count
Вопрос 3 из 30
Почему `break free` обычно слишком шумен при поиске двойного освобождения?
Вопрос 4 из 30
Как автоматически выполнить команды при точке и продолжить?
CСеанс GDB
(gdb) break process_item
Breakpoint 3 at 0x...
# На каждом попадании нужно печатать n и продолжать выполнение.
Вопрос 5 из 30
Зачем в GDB использовать `start`, а не ставить случайную точку внутри `main`?
Вопрос 6 из 30
Что первым посмотреть после SIGSEGV?
CСеанс GDB
(gdb) bt full
(gdb) frame 2
(gdb) info args
(gdb) info locals
Вопрос 7 из 30
Почему GDB показывает локальную переменную как `<optimized out>`?
Вопрос 8 из 30
Как перейти к кадру вызывающей функции?
CСеанс GDB
(gdb) up
(gdb) info locals
Вопрос 9 из 30
Что может означать бессмысленный стек вызовов после записи за границу локального массива?
CC17
char buf[16];
memcpy(buf,input,n); /* n не проверен */
Вопрос 10 из 30
Как исследовать содержимое памяти как 16 байтов в hex?
CСеанс GDB
(gdb) p ptr
$1 = (unsigned char *) 0x5555555592a0
(gdb) /* выберите команду просмотра следующих 16 байтов */
Вопрос 11 из 30
Какой дефект найдёт ASan в коде?
CC17
int a[10];
for(int i=0;i<=10;i++) a[i]=i;
Вопрос 12 из 30
Какие части отчёта `heap-use-after-free` наиболее важны для поиска причины?
Вопрос 13 из 30
Почему все объектные файлы ASan-сборки желательно компилировать совместимо?
CC17
cc -fsanitize=address -c a.c
cc -fsanitize=address -c b.c
cc -fsanitize=address a.o b.o -o app
Вопрос 14 из 30
Почему добавление большого случайного запаса к буферу не исправляет ошибку ASan?
Вопрос 15 из 30
Что означает отчёт `stack-use-after-return`?
CC17
char *bad(void){ char buf[32]="x"; return buf; }
Вопрос 16 из 30
Какой отчёт ожидается для `INT_MAX + 1` при включённой проверке знакового переполнения?
CC17
int x=INT_MAX;
printf("%d\n",x+1);
Вопрос 17 из 30
Какое нарушение обнаружит UBSan при выполнении выражения `1u << 32` на реализации с 32-битным `unsigned int`?
CC17
uint32_t mask = 1u << 32;
Вопрос 18 из 30
Какой дефект может показать проверка выравнивания?
CC17
uint32_t x=*(const uint32_t*)(buf+1);
Вопрос 19 из 30
Почему `-fno-sanitize-recover=undefined` полезен в проверочной сборке?
CC17
cc -fsanitize=undefined -fno-sanitize-recover=undefined test.c
Вопрос 20 из 30
Обнаруживает ли UBSan все нарушения эффективного типа и строгого псевдонимного доступа?
Вопрос 21 из 30
Программа падает на входном файле 20 МБ. Какой следующий шаг даст больше всего информации?
Вопрос 22 из 30
Зачем хранить core-файл вместе с точным бинарником и его отладочными символами?
CАнализ core
gdb /path/to/exact/app core.1234
Вопрос 23 из 30
Как проверить гипотезу о переполнении при расчёте длины?
CC17
if(n > SIZE_MAX/elem) return ERR;
size_t bytes=n*elem;
Вопрос 24 из 30
Почему место аварии может находиться далеко от места, где возникла причина?
Вопрос 25 из 30
Какие длины должны войти в регрессионный тест после исправления ошибки на единицу?
CC17
test_len(MAX-1);
test_len(MAX);
test_len(MAX+1);
Вопрос 26 из 30
Почему core-файл нельзя без проверки прикладывать к публичной задаче?
Вопрос 27 из 30
Почему гонка данных может исчезнуть при запуске под GDB?
Вопрос 28 из 30
Можно ли считать проект безопасным после одного чистого прогона ASan?
Вопрос 29 из 30
Как уменьшить риск утечки секрета через диагностический журнал?
Вопрос 30 из 30
Почему диагностическая сборка должна быть достаточно близка к рабочей?
CСверка сборок
cc -### ...
/* сравниваются диагностическая и рабочая команды сборки */

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу