ldd 在箭头后不显示位置;系统上不存在库

ldd 在箭头后不显示位置;系统上不存在库

我想创建一个 chroot 环境,该环境可以访问精心挑选的程序,但与系统的其余部分完全隔离。

我在此 chroot 文件夹中创建了三个文件夹:binliblib64。然后我复制了一个可执行文件,在本例中复制/bin/bashbin.ldd /bin/bash显示此输出:

linux-vdso.so.1 =>  (0x00007ffff01f6000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f35ed501000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f35ed2fd000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f35ecf33000)
/lib64/ld-linux-x86-64.so.2 (0x00007f35ed72a000)

我可以复制所有这些库,除了linux-vdso.so.1.如果我sudo find / -name "linux-vdso.so.1"没有输出。

我现在应该怎么做?

答案1

VDSO比较特殊,它是由内核直接提供的。

您会看到它有地址,即使它没有文件名,因此它映射得很好。您无需执行任何操作即可将 VDSO 放入 chroot 中。

内核VDSO 是并不总是需要模式切换的内核函数的集合,例如,读取精确的计时器由rdtsc支持它的处理器上的汇编指令处理,而由不支持它的处理器上的内核系统调用处理。如果这是一个正常的系统调用,现代处理器将不得不处理单个非特权汇编指令的系统调用开销,并且如果rdtsc始终内联,程序将不再在旧机器上运行。

答案2

你应该尝试运行你的程序;-)

linux-vdso.so.1是一个由内核自动映射到进程地址空间的虚拟库,参见vdso(7)。它不存在于文件系统中。

相关内容