Замена файлов / вызовов, как предварительная загрузка LD
Есть ли обычная утилита, которая делает подстановку на некоторые вызовы, такие как execve и open ? Например, LD_PRELOAD для вызовов.
Пример:
Обычным решением является следующее:
$: 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 ответа:
Я просто пишу специальную 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.
С его помощью вы можете подключить следующие вызовы:
- открыть,то fopen,fopen64
- opendir, mkdir, rmdir
- execve
- unlink, unlinkat
- stat, lstat, lstat64,_lxstat, _lxstat64, stat64
- _xstat, _xstat64,_ _ fxstatat
- 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