谁负责加载 /etc/ld.so.preload 中的文件?

Who is responsible to load files in /etc/ld.so.preload?

我之前想过,链接到动态库的程序会查看/etc/ld.so.preload

但是,我在某处读到

All programs try to open /etc/ld.so.preload, this behavior is baked into Glibc.

因此,为了避免glibc,我想到了用汇编代码编写程序。使用 nasmld 编译它。它仍在加载 /etc/ld.so.preload 个库。

我的最终目标是编写一个不尝试在 /etc/ld.so.preload 中加载库的程序。 为此,我需要知道谁负责加载它以及我如何编写这样的程序(无语言限制)?

PS :我真正的问题是我想编辑 /etc/ld.so.preload 以包含我的图书馆。但是万一这个库碰巧坏了,那么我机器上的每一个命令都会中断,我就不能在机器上做任何事情。因此,对于这种情况,我想随身携带一个实用程序,它将从 /etc/ld.so.preload 中删除我的库。在那种情况下,此实用程序以及 sudo 必须完全静态链接。

Who is responsible to load files in /etc/ld.so.preload?

动态链接器是。使用 GLIBC 时,动态链接器为 ld-linux.so.

Compiled it using nasm and ld. Still it is loading /etc/ld.so.preload libraries.

您要么是动态链接到 GLIBC,要么上面的说法是错误的。

actually I am running it using sudo, and sudo needs ld.so.preload. Can we by any means make sudo statically linked?

您可以重建许多要静态链接的程序,是的。但这有成本(磁盘 space,必须为每个安全修复重建所有程序,等等),而且可能并非完全微不足道。它也不太可能解决您遇到的任何实际问题。

My real problem is that I want to edit /etc/ld.so.preload to include my library. But In case if this library happens to be a broken one then every single command on my machine breaks and I cannot do anything on the machine. Hence, for such a case I want to keep a utility handy which would delete my library from /etc/ld.so.preload. In that case this utility as well as sudo must be completely statically linked.

这个问题的解决方案是按照 Russ Ridge 在对此答案的评论中建议的进行操作:"install a statically linked version of BusyBox"。

BusyBox 有您想要的 surm 命令。

另一种解决方案是学习如何使用 Linux recovery CD -- 这在很多情况下可能会派上用场,因此学习如何恢复系统非常值得。