修改libc.so.6导致崩溃解决

内容分享2小时前发布
0 0 0

root@u0-100:~# ll /lib/x86_64-linux-gnu/libc-*
-rwxr-xr-x 1 root root 2030544 Jun  5  2020 /lib/x86_64-linux-gnu/libc-2.27.so*
-rwxr-xr-x 1 root root 2029224 Oct 14 16:00 /lib/x86_64-linux-gnu/libc-2.31.so*
root@u0-100:~#
root@u0-100:~#
root@u0-100:~# ll /lib/x86_64-linux-gnu/libc.so.6
lrwxrwxrwx 1 root root 34 Oct 14 16:31 /lib/x86_64-linux-gnu/libc.so.6 -> /lib/x86_64-linux-gnu/libc-2.27.so*
root@u0-100:~#

/lib/x86_64-linux-gnu/libc.so.6libc.so.6是一个软连接。不能轻易修改这个文件。
(1)列如直接复制同名文件libc.so.6到/lib/x86_64-linux-gnu/libc.so.6,系统会立刻hang住,网络断开,无法连接,无法操作。只能重启机器。这是危险操作。
(2)再列如:强制重新连接:ln -s -f libc-2.31.so /lib/x86_64-linux-gnu/libc.so.6
这个命令危险,不能操作。操作完后,基本所有命令都不能使用了:

root@u0-100:/# ls
ls: relocation error: /lib/x86_64-linux-gnu/libpthread.so.0: symbol __libc_vfork version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
root@u0-100:/#
root@u0-100:/#

如果真的执行了上述操作,可以使用下面方法挽回:

root@u0-100:/# LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.27.so ln -s -f /lib/x86_64-linux-gnu/libc-2.27.so /lib/x86_64-linux-gnu/libc.so.6
root@u0-100:/#
root@u0-100:/# ls
bin   cdrom  etc   initrd.img      lib    media  opt   root  sbin  srv       sys  usr  vmlinuz
boot  dev    home  initrd.img.old  lib64  mnt    proc  run   snap  swap.img  tmp  var  vmlinuz.old

文件路径以及名称要换成你修改的位置。
linux调用so库文件时,先搜索当前路径,提供LD_PRELOAD系统变量可以改变这个顺序,改变后的搜索顺序为 LD_PRELOAD, 当前路径, 系统库目录。
于是,使用LD_PRELOAD指向正常的glibc库文件,然后执行ln等命令,就可以正常执行,执行成功之后, libc.so.6 就又存在了。

以上环境是ubuntu操作系统。centos应该也适用。

© 版权声明

相关文章

暂无评论

none
暂无评论...