有人能给我解释一下ldd命令的输出吗?在以下示例中(在Gentoo系统上)
$ ldd /bin/date
linux-vdso.so.1 => (0x00007fff6ffff000)
librt.so.1 => /lib64/librt.so.1 (0x00007f54ba710000)
libc.so.6 => /lib64/libc.so.6 (0x00007f54ba384000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f54ba167000)
/lib64/ld-linux-x86-64.so.2 (0x00007f54ba919000)第一行是什么意思?"linux-vdso.so.1 => (0x00007fff6ffff000)“=>没有指向任何共享库文件。
发布于 2013-08-22 00:11:28
输出中最重要的部分是linux-vdso。VDSO是Virtual Dynamic Shared Object的缩写,它是一种将内核空间例程导出到用户空间的方法。主要原因是为了减少系统调用开销。通常,当系统调用发生时,它需要一些昂贵的操作,如从用户到内核的切换模式,从用户空间复制数据到内核空间等。为了减少这些类型的开销,使用VDSO,只需读取该vdso,就可以提取内存空间结果,即可以在不进行真正的系统调用的情况下获取gettimeofday()!
注意,并不是所有的系统调用都支持VDSO,只有getcpu()、gettimeofday()、time()等系统调用才支持VDSO,这是完成这些任务的一种非常快的方法。此外,内存地址linux-vdso.so.1点是随机的,在不同的ldd调用中,您将看到linux-vdso.so.1点指向不同的内存位置。这样做就好像没有人可以预先预测地址一样。
https://stackoverflow.com/questions/18361845
复制相似问题