Тестирование FreeBSD rtld

Тестирование FreeBSD rtld

По некоторым причинам я пытаюсь модифицировать и протестировать свою собственную версию rtld (ld-elf.so.1). После каждого изменения, которое я вношу в этот компоновщик, мне нужно перезагрузить систему, поднять ее с CD/DVD, установить мою версию в /libexec/ и снова перезагрузить систему. Иногда она даже не запускает пользовательское пространство из-за ошибки сегментации. Я трачу много времени на такую ​​процедуру.

Я хотел бы спросить, как мне запустить этот линкер из командной строки без переустановки моего rtld в /libexec и перезагрузки системы. Возможно ли запустить rtld аналогично Linux /lib/ld-linux.so.2?

Я пытался запустить ld-elf.so.1, но каждый раз получаю segmentation fault. Возможно, я пропустил какие-то параметры в командной строке rtld. Есть предложения, как запустить rtld из командной строки?

Может быть, мне следует изменить интерпретатор по умолчанию для моих исполняемых файлов?

Редактировать: В качестве файловой системы для моей rootfs я использую UFS.

решение1

Можно ли запустить rtld аналогично Linux /lib/ld-linux.so.2?

Да, запуск прекрасно /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) и не может сам зависеть от общих объектов или использовать другой интерпретатор.

решение2

Для своей rootfs я использую UFS.

Это позор, потому что ответ ZFS довольно прост. Возможно, вы увидите в этом причину для перехода.

До тех пор, пока все статические части операционной системы находятся в одном наборе данных, вы создаете ZFSклоннабора данных, смонтируйте его в каком-нибудь подкаталоге, измените там загрузчик (или что-то еще, что вы хотите изменить), а затем создайте джейл с этим подкаталогом в качестве корня. Это обеспечивает копию-при-записи вашей операционной системы, но с измененным загрузчиком,на местекак если бы он был установлен в качестве основного загрузчика (которыйэточто касается тюрьмы).

(TrueOS показал пример, имея большой набор данных для корня и /usrэффективно отсекая точки для отдельных наборов данных, например /var/*, /tmp, и /usr/{obj,src,ports,jails,home}.)

Такой подход устраняет длительный процесс, описанный в jailруководстве и главе 14Справочник FreeBSD, для настройки дерева каталогов тюрьмы, включая создание полной копии операционной системы внутри корневого каталога тюрьмы. Клон ZFS — это быстрое копирование при записи, берущее в качестве источника настоящий корневой набор данных.

Связанный контент