web-dev-qa-db-fra.com

LDD ne montre aucun endroit après arrow; la bibliothèque n'existe pas sur le système

Je souhaite créer un environnement chroot qui a accès aux programmes cueillis à la main mais est complètement isolé du reste du système.

J'ai créé trois dossiers dans ce dossier chroot: bin, lib, lib64. J'ai ensuite copié un exécutable, dans ce cas /bin/bash dans bin. ldd /bin/bash montre cette sortie:

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)

Je peux copier toutes ces bibliothèques, sauf linux-vdso.so.1. Si je Sudo find / -name "linux-vdso.so.1" Je n'ai aucune sortie.

Qu'est-ce que je devrais faire maintenant?

9
Post Self

Le VDSO est spécial, il est directement fourni par le noyau.

Vous voyez qu'il a des adresses, même s'il n'a pas de nom de fichier, il a donc été cartographié bien. Vous n'avez rien à faire pour obtenir le VDSO dans le chroot.

Le Kernel VDSO est une collection de fonctions de noyau qui ne nécessitent pas toujours d'un commutateur de mode, par exemple. La lecture des minuteries exactes est traitée par la rdtsc instructions d'assembleur sur les processeurs qui le supportent et par un noyau SysCalls sur les processeurs qui ne le font pas. S'il s'agissait d'un appel système normal, les processeurs modernes devraient traiter de la surcharge SYSCALL pour une seule instruction d'assembleur non privilégiée, et si rdtsc a toujours été induisée, les programmes ne fonctionnaient plus sur des machines plus anciennes.

9
Simon Richter

Vous devriez essayer d'exécuter vos programmes ;-)

linux-vdso.so.1 Est une bibliothèque virtuelle qui est automatiquement mappée dans l'espace d'adresses d'un processus par le noyau, voir vdso(7) . Il n'existe pas dans le système de fichiers.

4
qubert