Трассировка вызовов

Strace

https://strace.io

Что умеет:

ИРЛ:

LD_PRELOAD

Файл с примером:

   1 #include <stdio.h>
   2 #include <string.h>
   3 #include <stdlib.h>
   4 
   5 int main(int argc, char *argv[]) {
   6         int i;
   7         char *s;
   8 
   9         s = strdup(argv[argc-1]);
  10         for(i=0; i<4; i++)
  11                 printf("%s: %d, %d\n", s, rand(), i*2+1);
  12 
  13         return 0;
  14 }

ld.soLD_PRELOAD, LD_LIBRARY_PATH и т. д.

В ту же тему: ldd

Прочее

Д/З

  1. Прочитать про
  2. Написать программу move.c, принимающую два параметра в командной строке: move infile outfile, которая перемещает содержимое файла infile в файл outfile (если таковой был, его содержимое удаляется), и в случае успеха удаляет infile.

    • Программа должна проверять по возможности все возможные ошибки и сообщать о них;
      • В каждом случае необходимо выставлять различный код ошибки
    • Программа должна по возможности работать безопасно — не удалять исходный файл, пока целевой не закрыт, удалять целевой файл и сохранять исходный, если есть подозрение, что что-то пошло не так
    • Данные надо копировать (разрешено целиком считывать файл в память); использование link(2) не допускается.

    • Написать тесты с помощью strace error injection, которые позволяют проверить как можно больше ошибочных ситуаций:

      • проверяют код ошибки и наличие того файла, который должен был остаться ☺;
      • скорее всего, обработать таким образом malloc() не получится — и не требуется!

    • Написать .so библиотеку для LD_PRELOAD, при подгрузке которой файл, в имени которого есть строка "PROTECT", не удаляется (как минимум — не удаляется при помощи вашего move). Написать тест, который это проверяет

    • Как обычно, написать Makefile:

      • По умолчанию — сборка move и библиотеки

      • test: запуск тестов на вброс ошибки и теста на LD_PRELOAD

      • clean: удаление генератов

  3. Создать в репозитории каталог 06_Tracing и положить туда решение задачи

LecturesCMC/LinuxApplicationDevelopment2024/06_Tracing (последним исправлял пользователь FrBrGeorge 2025-07-05 11:36:05)