帮助使用LD_PRELOAD

时间:2008-11-07 19:04:16

标签: c linux

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

  1. 据我所知,首先该程序不能改变evective uid或gid(所谓的suid或guid程序)。
  2. 它应该仅用于特定目的,例如调试。据我所知,你可能会在C中影响函数(在精灵中?)。然而,两种技术 - LD_PRELOAD和阴影都应该处理极端护理。我记得在GLib内部发生变化时发现gpgme代码(或其他与gpg相关的)g_malloc中的错误。
  3. 简单的答案是 - 不要这样做。更复杂 - 当且仅当你必须这样做时 - 通常你不这样做(除非你编写某种调试软件)。

答案 2 :(得分:-3)

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