以下是我遇到的情景:chroot如何影响动态链接?
我创建了debootstrap ubuntu特立独行(64位)环境。我把它放在我的ubuntu(64位)清晰系统上的/env/mav/
。我可以将chroot
分成/env/mav
,并且可以完美地利用特立独行的系统。
我甚至可以在chrooted环境外使用lucid程序。那就是/env/mav/bin/ls
会运行。
然而,我注意到,如果我修改LD_LIBRARY_PATH
为/env/mav/lib
[1] [2]
每一个程序(包括清晰和特立独行)我运行会立即崩溃。 (例如ls导致段错误)。 kern.log显示:
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
但是,很明显,如果我chroot
为/env/mav
,每个程序都运行良好。并不是所有的图书馆都只是从监狱里读取(/env/mav
)/lib
?那么在这种情况下chroot
和修改LD_LIBRARY_PATH
有什么区别?
而且,如果我:
mount -B /env /env/mav/env
然后chroot /env
,然后设置LD_LIBRARY_PATH
为/env/mav/lib
,一切仍然运行良好。
我不知道内部会发生什么。是否有某些ld内部存储在某处? chroot做了些神奇的事情吗?
[1]用例是从正确绑定的特立独行的环境中运行程序,以便在特立独行的监狱外特立独行动态链接的库。
[2]这只是一个简略的例子。实际上,/usr/lib
等都包括在内。包括特立独行的环境/ lib“毒药”的一切;使用其他特立独行者库目录没有问题。
感谢您对linux连接系统如何工作的解释。完美工作。 – UsAaR33
发现将libpthread.so链接到libc.so(使用LD_DEBUG)时发生崩溃。值得注意的是,来自未来的人ld.so --list允许你用不同的连接器进行ldd。 – UsAaR33