绝命中的一助linux程序加载器ld-linux.so中的LD_PRELOAD预加载库

原创 2016年06月01日 14:42:52


偶然错误的将linux系统中的libc.so.6链接删除,导致busybox所有cmd命令失效,报load library error.最终的解决方法是采用预加载库的方式来解决这个问题:


LD_PRELOAD=/lib/libc-2.6.1.so ln -s /lib/libc-2.6.1.so libc.so.6
根据shell/exec加载elf程序的原理,是先解析ELF,定位并加载ld-linux.so这个程序加载器(该so路径需要通过ELF直接确定,且不依赖其他库),然后再解析elf中需要load的共享库,但这之前可以通过LD_PRELOAD来提前预先加载共享库,如果程序允许需要的未初始化symbol在预加载库中的话,就不会再load needed的共享库(如果预先加载的库也不满足运行需要,则继续根据编译时symbol所needed关系来load对应的so库,如果库查找后不存在就报load error。
预先加载so库的好处:避免了程序运行时所谓的库缺失,可以理解为是一种半自动的so加载过程,需要LD_PRELOAD变量来指定真实的库路径。当前,所有一切的功劳都是ld-linux的魅力所在。

版权声明:本文为CSDN博主(天才2012)原创文章,未经博主允许不得转载。

Linux之so加载原理分析

程序的链接和装入存在着多种方法,而如今最为流行的当属动态链接、动态装入方法。本文首先回顾了链接器和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现。了解...
  • sauphy
  • sauphy
  • 2015年11月30日 23:46
  • 496

动态链接库(SO)加载原理

1、动态链接库的加载流程 首先从宏观流程上来看,对于 load 过程我们分为 find&load,首先是要找到 so 所在的位置,然后才是 load 加载进内存,同时对于 dalvik 和 art 虚...
  • q1183345443
  • q1183345443
  • 2016年11月21日 14:52
  • 2874

so加载流程(简单总结)

作为一个android逆向刚开始的菜鸟,不自量力来总结一下so的加载流程,由于暂时水平有限,这里借助几篇网上大佬们的博客(侵删),自己简单总结自己所学,算作笔记,还会慢慢加深自己的理解,持续更新。...
  • m0_37344790
  • m0_37344790
  • 2017年11月28日 18:55
  • 47

so 加载过程

http://www.360doc.com/content/13/0816/20/7377734_307665299.shtml helloworld程序中的printf函数是怎样调用的?库分为两种...
  • losemyheaven
  • losemyheaven
  • 2015年10月10日 16:57
  • 864

linux动态链接库的加载顺序:

linux动态链接库的加载顺序: 它有5个地方会查找, 1. 编译时指定的run path 2. LD_LIBRARY_PATH 指定的地方 3. ldconfig 指定的地方 4. /lib 5. ...
  • hejinjing_tom_com
  • hejinjing_tom_com
  • 2016年09月06日 22:43
  • 2163

深入理解LINUX下动态库链接器/加载器ld-linux.so.2

最近在Linux 环境下开发,搞了好几天 Compiler 和 linker,觉得有必要来写一篇关于Linux环境下 ld.so的文章了,google上搜索了很多相关介绍性的文档,发现国内百度上却很少...
  • elfprincexu
  • elfprincexu
  • 2016年06月17日 17:18
  • 5089

ld-linux.so查找共享库的顺序

from http://www.iteedu.com/os/linux/mklinuxdiary/ch4mksystem/4.php ld-linux.so查找共享库的顺序 Glibc安装...
  • feisy
  • feisy
  • 2014年01月03日 15:49
  • 2679

ld-linux.so.2

/lib/ld-linux.so.2以及它的64位版本/lib64/ld-linux-x86-64.so.2虽然看起来是共享库文件,但实际上他们可以独立运行。他们的功能是负责动态加载。它们通过读取可执...
  • rdc2008
  • rdc2008
  • 2014年03月14日 11:27
  • 3144

/lib/ld-linux.so.3: No such file or directory

    今天在Ubuntu9.04下搭建了一下Scratchbox交叉编译环境,并在新建的ARM模拟器上对Scratchbox自带的hello-world程序进行编译,运行时出现题目所示错误。    ...
  • harry_helei
  • harry_helei
  • 2010年07月16日 17:49
  • 12036

linux共享库,以及/etc/ld.so.conf文件的应用

Linux 共享库  Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。...
  • ming470612141
  • ming470612141
  • 2008年11月21日 23:17
  • 5973
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:绝命中的一助linux程序加载器ld-linux.so中的LD_PRELOAD预加载库
举报原因:
原因补充:

(最多只允许输入30个字)