是否有通常的实用程序可以替换某些调用,例如 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是系统调用。这个util的名称是什么?
答案 0 :(得分:1)
我只是编写了一个特殊的FILE_PRELOAD实用程序来解决我的问题。
$: FILE_PRELOAD -C "execve+open+stat:/usr/bin/prog_b:/usr/bin/prog_b.old" ./prog_a
它生成c ++代码,然后在运行./prog_a之前编译它然后LD_PRELOAD结果lib.so文件。
使用它可以挂接下一个电话:
请先运行docs/tut.sh(这是FP实用程序的教程)。
答案 1 :(得分:0)
通用解决方案是符号链接解决方案。它不脏。例如,请查看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