LD上的LD_PRELOAD?

时间:2016-03-19 03:05:34

标签: linux ld-preload

我使用下面作为我系统上open()系统调用的包装器...我已将其编译成.so文件....并将其放在/etc/ld.so.preload中。它似乎运作良好......

int open(__const char *pathname, int flags, mode_t mode)
{
    printf("in open %s\n ", pathname);
    //other stuff
}

它适用于所有二进制文件... vim,touch,cat,less,head等....除了“ls”命令!!

我不明白为什么。

如果我使用“sudo ls”,它最终会再次使用包装器正确....

那么“ls”有什么特别之处,共享库加载器决定它可以跳过我的open()包装器函数......?

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007fffacbcd000)
    /usr/lib/x86_64-linux-gnu/libtracing.so (0x00007f09b0bce000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f09b09ab000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f09b07a3000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f09b03de000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f09b01da000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f09aff9c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f09b0dd0000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f09afd97000)

我可以看到它的链接(我的第二个名为libtracing.so)。

这与我运行sudo或不运行的任何其他命令不会发生,它们似乎都有效。

这是因为libselinux的特殊之处吗?有人有什么想法?

0 个答案:

没有答案