Лекция и рабочая группа в цикле «Системное и низкоуровневое программирование»
Что происходит в
- Скомпилировать / запустить
 - Как пройти отладчиком? 
- Debuginfo в файле
 cc -O0 -g
 - Debuginfo библиотек 
- В отдельном сегменте репозиотория
 - Доступны по debuginfod
 
 
Трудно дойти до конца!
Пример посложнее: копирование из файла в файл по частям
GDB
- Основные команды 
start = b + main
n vs s; until
b
catch
p ex …
 --args
- Сценарии для gdb
 
Strace
- В частности, error injection
 
Дисциплина программирования
- Shell-сценарии VS Makefile VS более сложные системы сборки
 Обработка ошибок, stderr и perror()
-Wall -Werror
- …
 
(Времени не хватит) LD_PRELOAD
(если хватит — тут + Д/З)
Д/З
- Что читать / смотреть: 
Соответствующие лекции курса «Разработка программного обеспечения для GNU/Linux»
https://man7.org/tlpi/ (PDF, в том числе перевода, можно найти в сети), https://man7.org ☺
Про main()
 Написать на Си утилиту noname, которая запускает произвольную программу по заданному пути, подменяя её имя (параметр argv[0]) на заданное и сохраняя параметры
- Без параметров показывает помощь по запуску
 С одним параметром noname /path/to/program — запускает программу program с подменой имени на noname
- Вместо java можно запустить любой другой процесс, который не успевает завершиться к моменту вызова ps
 
С двумя и более параметрами noname program alias [param1 [param2 …]] — запускает программу program с подменой имени на alias и передачей ей параметров param1 [param2 …]
- Если программу по какой-то причине нельзя запустить, выводится диагностика, поясняющая причину.
 - Код утилиты написан так, чтобы было проще сделать следующее задание
 
 У запускаемой программы достаточно только подменить argv[0], полностью маскировать ничего не надо. Например, просто ps вместо argv пользуется какой-то другой информацией, и во всех примерах выше имя остаётся прежним 
- Написать shell-сценарий, в котором 
Вызывается gdb-сценарий, который только в случае запуска утилиты с несколькими параметрами будет выдавать последний параметр
- Допустимо выводить и другую информацию
 
Вызывается несколько strace с вбрасыванием всех возможных обрабатываемых ошибок
 Файлы с решением (исходный текст программы и сценарии) послать в виде приложения к письму по адресу uneexlectures@cs.msu.ru
В теме письма должно встречаться слово НЕЙМАРК
Варианты окружения:
- Любой Linux-дистрибутиив + gcc + gdb + strace (+debuginfo как минимум для glibc)
 Модифицированная Live-версия Simply Linux (изготавливется вручную, возможно, будет обновляться)
Семинар
Нижний Новгород, 23/V
