Замена файлов / вызовов, как предварительная загрузка LD


Есть ли обычная утилита, которая делает подстановку на некоторые вызовы, такие как execve и open ? Например, LD_PRELOAD для вызовов.

Пример:

  • у нас есть prog_A , который использует prog_B .
  • несколько дней назад prog_B был обновлен, а теперь prog_A не удалось!(
  • Обычным решением является следующее:

    $: mv /usr/bin/prog_b /usr/bin/prog_B.new
    $: ln -s /usr/bin/prog_b.old /usr/bin/prog_b
    $: ./prog_a                                       # now run 
    
    Но иногда это неудобное и грязное решение. В некоторых историях правильный способ сделать Итак:
    $: util "execve+open+stat:/usr/bin/prog_b=/usr/bin/prog_b.old" ./prog_a
    

    Где execve, open & stat-системные вызовы. Как называется этот утиль?

    2 2

    2 ответа:

    Я просто пишу специальную file_preload утилиту для решения моей проблемы.

    $: FILE_PRELOAD -C "execve+open+stat:/usr/bin/prog_b:/usr/bin/prog_b.old" ./prog_a
    

    Он генерирует код c++, затем компилирует его и затем LD_PRELOAD результат lib.so файл перед запуском ./ prog_a.

    С его помощью вы можете подключить следующие вызовы:

    1. открыть,то fopen,fopen64
    2. opendir, mkdir, rmdir
    3. execve
    4. unlink, unlinkat
    5. stat, lstat, lstat64,_lxstat, _lxstat64, stat64
    6. _xstat, _xstat64,_ _ fxstatat
    7. freopen, freopen64

    Пожалуйста, бегите docs/tut.sh Во-первых (это учебник для утилиты FP).

    Общее решениеявляется решением символьной ссылки. Она не грязная. Посмотрите, например, на debian или Ubuntu. У них есть /etc/alternatives для этой цели.

    Вот пример списка для команды view на Ubuntu:

    user@server ls -al /usr/bin/view
    lrwxrwxrwx 1 root root 22 Dez  5  2009 /usr/bin/view -> /etc/alternatives/view
    user@server ls -al /etc/alternatives/view
    lrwxrwxrwx 1 root root 18 Dez  5  2009 /etc/alternatives/view -> /usr/bin/vim.basic