繁体   English   中英

ldd输出的说明

[英]Explanation of ldd output

有人可以向我解释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)”=>不指向任何共享库文件。

该输出中最重要的部分是linux-vdso。 VDSO代表虚拟动态共享对象 - 它是一种将内核空间例程导出到用户空间的方法。 主要原因是减少系统调用开销。 通常,当系统调用发生时,它需要一些昂贵的操作,例如从用户到内核的切换模式,将数据从用户空间复制到内核空间等。为了减少这些开销,使用VDSO,只需读取vdso内存空间结果就可以提取,即它可以gettimeofday()而无需进行真正的系统调用!

请注意,并非所有系统调用都支持VDSO,只有系统调用,如getcpu(),gettimeofday(),time()等,这是完成这些操作的极快方法。 内存地址linux-vdso.so.1也是随机的,在不同的ldd调用中你会看到linux-vdso.so.1指向不同的内存位置。 这样做就好像没人能预先预测地址一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM