我有静态链接的二进制文件(ELF 文件),它没有动态段、.dymsym 部分,并且不执行 LD_PRELOAD 命令等。 我如何创建假虚拟动态段来激活动态加载器并执行 LD_PRELOAD 命令?
我如何创建假虚拟动态段来激活动态加载器并执行 LD_PRELOAD 命令?
你不能。
即使可以,让
LD_PRELOAD
预加载某些内容仍然毫无用处:通常您想在 LD_PRELOAD
ed 库中插入一些符号,但这需要这些符号在主二进制文件中为unresolved,或者至少在其动态符号表中导出。静态链接的可执行文件没有任何未解析的符号,根据定义也没有动态符号表。
如何制作静态链接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 等对进程进行限制很有用。