【问题标题】:Explanation of ldd outputldd输出说明
【发布时间】:2013-08-21 15:39:06
【问题描述】:

有人可以向我解释一下 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 unix shared-libraries ldd


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2017-05-03
    相关资源
    最近更新 更多