Лекция и рабочая группа в цикле «Системное и низкоуровневое программирование»
Что происходит в
- Скомпилировать / запустить
- Как пройти отладчиком?
- 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