【问题标题】:Help with using LD_PRELOAD帮助使用 LD_PRELOAD
【发布时间】:2008-11-07 19:04:16
【问题描述】:

我想用 printf 的修改版本创建一个库,然后调用 LD_PRELOAD 所以当我的程序调用 printf 时,它会使用我的版本。有人可以向我解释如何使用 LD_PRELOAD 以及我的代码或库中是否需要做一些特别的事情?

【问题讨论】:

    标签: c linux


    【解决方案1】:

    您只需将环境变量LD_PRELOAD 设置为替换库的完整路径。由于您在此之后启动的所有程序都将尝试使用此库,因此您可能需要创建一个包装脚本来设置 LD_PRELOAD 然后调用您要运行的程序。

    【讨论】:

    • 或者我最喜欢的方式(使用 sh 或 bash):LD_PRELOAD=/path/to/lib ./myProg
    【解决方案2】:
    1. 据我所知,首先该程序不能更改有效的 uid 或 gid(所谓的 suid 或 guid 程序)。
    2. 它只能用于特定目的,例如调试。据我记得你可能会隐藏 C 中的函数(在精灵中?)。然而,这两种技术 - LD_PRELOAD 和阴影都应该处理极端护理。我记得在 GLib 内部发生变化时,在 gpgme 代码(或其他与 gpg 相关的代码)中发现了阴影 g_malloc 的错误。

    简单的答案是 - 不要这样做。更复杂的 - 当且仅当你必须这样做 - 通常你不这样做(除非你编写某种调试软件)。

    【讨论】:

      【解决方案3】:

      这似乎是个坏主意。为什么不将您的 printf 版本命名为其他名称?

      【讨论】:

        猜你喜欢
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多