当前位置:  开发笔记 > 前端 > 正文

什么是LD_PRELOAD技巧?

如何解决《什么是LD_PRELOAD技巧?》经验,为你挑选了5个好方法。

我最近在proggit上看到了它的引用,并且(截至目前)它没有被解释.

我怀疑这可能是它,但我不确定.



1> JesperE..:

如果设置LD_PRELOAD为共享对象的路径,则该文件将任何其他库(包括C运行时libc.so)之前加载.因此,要运行ls您的特殊malloc()实现,请执行以下操作:

$ LD_PRELOAD=/path/to/my/malloc.so /bin/ls


如果ruid!= euid - Joshua,装载程序将忽略LD_PRELOAD这一事实可以确保安全
要记住一件重要的事情:你通常想要指定一个*绝对*路径到`LD_PRELOAD`.原因是它是一个环境变量,它由子进程继承 - 它可能具有与父进程不同的工作目录.因此任何相对路径都无法找到要预加载的库.
@ heinrich5991真实有效的用户ID:http://www.lst.de/~okir/blackhats/node23.html
@Joshua:什么是ruid和euid?
我不知道这个存在......它似乎是安全攻击的主要载体.知道它是如何安全的吗?
lst.de/ link是403禁止访问,这里是https://web.archive.org/web/20080318213813/http://www.lst.de/~okir/blackhats/node23.html
是.修补装载机.

2> Joshua..:

您可以通过创建具有相同符号的库并在其中指定库来覆盖库存库中的符号LD_PRELOAD.

有些人用它来指定非标准位置的库,但LD_LIBRARY_PATH更适合这个目的.


"有些人用它来指定非标准位置的图书馆"......真的吗?听起来像"有些人用错了"!
LD_PRELOAD可以凭借加载顺序拦截应用程序指定的硬编码路径.
我已经看到它曾经用于加载调试或检测变体,或者加载一个库,该库执行与基本库完全不同的东西,就像模仿其他系统一样.

3> Ronny Brende..:

有了LD_PRELOAD你可以给图书馆的优先级.

例如,您可以编写一个实现malloc和的库free.并通过与装载这些LD_PRELOADmallocfree会被执行,而不是标准的.


@JanusTroelsen如果您编写的库没有实现某个部分,那么该部分将从原始库加载.

4> Patric..:

正如很多人提到的,LD_PRELOAD用来预加载库.顺便说一句,您可以通过命令检查设置是否可用ldd.

示例:假设您需要预加载自己的libselinux.so.1.

> ldd /bin/ls
    ...
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f3927b1d000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f3927914000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f392754f000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f3927311000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f392710c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3927d65000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f3926f07000)

因此,设置预加载环境:

  export LD_PRELOAD=/home/patric/libselinux.so.1

再次检查你的图书馆:

>ldd /bin/ls
    ...
    libselinux.so.1 =>
    /home/patric/libselinux.so.1 (0x00007fb9245d8000)
    ...



5> 小智..:

LD_PRELOAD列出具有覆盖标准集的函数的共享库,就像那样/etc/ld.so.preload.这些是由加载器实现的/lib/ld-linux.so.如果要覆盖几个选定的函数,可以通过创建覆盖对象文件和设置来完成此操作LD_PRELOAD; 此对象文件中的函数将仅覆盖那些将其他函数保留原样的函数.

有关共享库的更多信息,请访问 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有