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

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.

    • Программа должна проверять по возможности все возможные ошибки и сообщать о них, в том числе выставляя различный код ошибки
    • Программа должна по возможности работать безопасно — не удалять исходный файл, пока целевой не закрыт, удалять целевой файл и сохранять исходный, если есть подозрение, что что-то пошло не так
    • Написать тесты с помощью strace error injection, которые позволяют проверить как можно больше ошибочных ситуаций (проверяют код ошибки и наличие того файла, который должен был остаться ☺)

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

    • Как обычно, написать Makefile со сборкой, запусками тестов и очисткой генератов

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

LecturesCMC/LinuxApplicationDevelopment2024/06_Tracing (последним исправлял пользователь FrBrGeorge 2024-10-22 17:29:21)