2

是否有通常的实用程序可以替代某些调用,例如execveopen?就像呼叫的 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 是系统调用。这个实用程序的名称是什么?

    4

    2 回答 2

    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 文件。

    使用它,您可以挂钩下一个调用:

    1. 打开,fopen,fopen64
    2. 打开目录,mkdir,rmdir
    3. 执行
    4. 取消链接,取消链接
    5. 统计,lstat,lstat64,_ lxstat, _lxstat64,stat64
    6. _ xstat, _xstat64,__fxstatat
    7. 自由开放,自由开放64

    请先运行docs/tut.sh(这是 FP 实用程序的教程)。

    于 2013-05-27T19:08:16.573 回答
    0

    常见的解决方案是符号链接解决方案。它不脏。看看debianUbuntu例如。他们有/etc/alternatives这个目的。

    view以下是on 命令的示例清单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
    
    于 2013-05-03T02:35:56.910 回答