我想创建一个 chroot 环境,该环境可以访问精心挑选的程序,但与系统的其余部分完全隔离。
我在此 chroot 文件夹中创建了三个文件夹:bin
、lib
、lib64
。然后我复制了一个可执行文件,在本例中复制/bin/bash
到bin
.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)
。它不存在于文件系统中。