首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FreeBSD测试

FreeBSD测试
EN

Unix & Linux用户
提问于 2020-03-22 07:34:26
回答 2查看 101关注 0票数 0

出于某些原因,我试图修改和测试我自己版本的rtld (ld-elf.so.1)。在对这个链接器做了每次更改之后,我需要重新启动系统,从CD/DVD中取出它,在/libexec/中安装我的版本,然后再重新启动系统。有时,由于分割错误,它甚至无法运行用户空间。我在这样的过程中浪费了很多时间。

我想问一下,如何在不重新安装/libexec中的rtld并重新启动系统的情况下,从命令行启动这个链接器。是否可以类似于Linux /lib/d-linux.so.2运行rtld?

我试着运行ld-elf.so.1,但是每次我得到分割错误。可能我错过了rtld命令行中的一些参数。对如何从命令行运行rtld有任何建议吗?

也许我可以更改我的可执行文件的默认解释器?

编辑:作为我的rootfs的文件系统,我使用UFS。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-03-22 16:19:16

是否可以类似于Linux /lib/ld-linux.so.2运行rtld?

是的,只运行/libexec/ld-elf.so.1 /path/to/your_binary在FreeBSD上运行得很好,就像在Linux上一样。

也许我可以更改我的可执行文件的默认解释器?

是的,您可以通过cc -Wl,-dynamic-linker=/path/to/your_interpreter在编译二进制文件时做到这一点。-Wl,..是gcc/clang将参数直接传递给链接器的方式,您可以查看ld(1)手册,了解其--dynamic-linker和其他标志的说明。

我试着运行ld-elf.so.1,但是每次我得到分段错误。

动态链接器/解释器应该编译为独立于位置的(-pie),它本身不能依赖共享对象,也不能使用另一个解释器。

票数 1
EN

Unix & Linux用户

发布于 2020-03-22 11:04:32

对于rootfs,我使用UFS。

这是个遗憾,因为ZFS的答案非常简单。也许你会把它看作是一个转换的理由。

只要操作系统的静态部分都在一个dataset上,您就可以创建dataset的ZFS克隆,将其挂载到某个子目录中,在那里修改加载程序(或任何要修改的内容),然后创建一个以该子目录作为根目录的监狱。这提供了操作系统的副本,但使用了修改后的加载程序,如果将其安装为主加载程序(就监狱而言,它就是这样)。

(TrueOS展示了这方面的方法,为根和/usr提供了一个大的数据集,并有效地为/var/*/tmp/usr/{obj,src,ports,jails,home}等单独的数据集修剪了点。)

这种方法消除了jail手册页和“FreeBSD手册”第14章中概述的用于设置监狱目录树的冗长过程,包括在监狱的根目录中构建整个操作系统副本。ZFS克隆是以真实的根数据集为其来源的快速写入复制。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/574204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档