关闭

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

2014人阅读 评论(0) 收藏 举报
分类:


偶然错误的将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的魅力所在。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:619850次
    • 积分:8353
    • 等级:
    • 排名:第2442名
    • 原创:162篇
    • 转载:44篇
    • 译文:0篇
    • 评论:299条
    天才的嵌入式的世界
    喜欢开源,喜欢交流吹牛,哈哈!!!! QQ:1037701636; CSDN:http://blog.csdn.net/gzzaigcn。 百度知道团队:嵌入式的世界,欢迎加入
    博客公告
    本博客所有原创Blog,是本人对学习过程的记录。欢迎交流,欢迎转载,转载请务必注明出处。
    博客专栏
    最新评论