帮助使用LD_PRELOAD

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

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

  1. 据我所知,首先程序不能改变evective uid或gid(所谓的suid或guid程序)。
  2. 它应该仅用于特定目的,例如调试。 据我所知,你可能会在C中影响函数(在精灵中?)。 然而,这两种技术 – LD_PRELOAD和阴影都应该处理极端护理。 我记得在GLib内部发生变化时发现gpgme代码(或与gpg相关的其他内容)中的g_malloc阴影中的错误。

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

这似乎是一个坏主意。 为什么不给你的printf版本命名呢?