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

Pos*_*elf 12 linux chroot ubuntu find shared-library

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

我在这个 chroot 文件夹中创建了三个文件夹:bin, lib, lib64. 然后我复制了一个可执行文件,在这种情况下复制/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)
Run Code Online (Sandbox Code Playgroud)

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

我现在该怎么办?

Sim*_*ter 12

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

你会看到它有地址,即使它没有文件名,所以它映射得很好。您无需执行任何操作即可在 chroot 中获取 VDSO。

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


qub*_*ert 6

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

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