如何制作静态链接ELF文件来加载LD_PRELOAD.so

问题描述 投票:0回答:2

我有静态链接的二进制文件(ELF 文件),它没有动态段、.dymsym 部分,并且不执行 LD_PRELOAD 命令等。 我如何创建假虚拟动态段来激活动态加载器并执行 LD_PRELOAD 命令?

linux loader elf ld-preload
2个回答
7
投票

我如何创建假虚拟动态段来激活动态加载器并执行 LD_PRELOAD 命令?

你不能。

即使可以,让

LD_PRELOAD
预加载某些内容仍然毫无用处:通常您想在 LD_PRELOAD
ed 库中插入一些符号,但这需要这些符号在主二进制文件中为 
unresolved,或者至少在其动态符号表中导出。静态链接的可执行文件没有任何未解析的符号,根据定义也没有动态符号表。


0
投票
我首先要说的是,我认为您提出的解决方案不起作用,但是有一种方法可以将动态库加载到静态二进制文件中(这回答了您最初的问题)。

如何制作静态链接ELF文件来加载LD_PRELOAD.so

为此,您需要直接调用链接器,例如 ld.so (与调用普通可执行文件完全相同)。如果找不到它,请检查以下路径:

ls /lib64/ld* ls /lib/ld*
您应该找到 x86(32 位)和 64 位的链接器。选择与您要注入的二进制文件兼容的版本。事实上,您还可以使用 

--help

 显示一些选项。最后一部分是使用 
--preload
 选项和可执行文件调用加载程序,如下所示:

/lib64/ld-linux-x86-64.so.2 --preload /path/to/shared_lib.so /path/to/executable
您可能还想查看 ld.so 联机帮助页。

注意:这不会替换二进制文件上的符号(也称为替换为注入的实现),但这对于使用 SECCOMP 或 Landlock LSM 等对进程进行限制很有用。

© www.soinside.com 2019 - 2024. All rights reserved.