Pruebas de FreeBSD rtld

Pruebas de FreeBSD rtld

Por alguna razón, estoy intentando modificar y probar mi propia versión de rtld (ld-elf.so.1). Después de cada cambio que hice a este vinculador, necesito reiniciar el sistema, abrirlo desde CD/DVD, instalar mi versión en /libexec/ y reiniciar el sistema nuevamente. A veces ni siquiera ejecuta el espacio de usuario debido a un error de segmentación. Estoy perdiendo mucho tiempo en tal procedimiento.

Me gustaría preguntar cómo puedo iniciar este vinculador desde la línea de comandos sin reinstalar mi rtld en /libexec y reiniciar el sistema. ¿Es posible ejecutar rtld de manera similar a Linux /lib/ld-linux.so.2?

Intenté ejecutar ld-elf.so.1 pero cada vez aparece un error de segmentación. Probablemente me perdí algunos parámetros en la línea de comando rtld. ¿Alguna sugerencia sobre cómo ejecutar rtld desde la línea de comandos?

¿Quizás podría cambiar el intérprete predeterminado de mis ejecutables?

Editar: como sistema de archivos para mis rootfs uso UFS.

Respuesta1

¿Es posible ejecutar rtld de manera similar a Linux /lib/ld-linux.so.2?

Sí, ejecutar /libexec/ld-elf.so.1 /path/to/your_binaryfunciona bien en FreeBSD, al igual que en Linux.

¿Quizás podría cambiar el intérprete predeterminado de mis ejecutables?

Sí, puedes hacerlo al compilar binarios, a través de cc -Wl,-dynamic-linker=/path/to/your_interpreter. Esta -Wl,..es la forma en que gcc/clang pasa argumentos directamente al vinculador; puede consultar la ld(1)página de manual para obtener una explicación de este --dynamic-linkery otros indicadores.

Intenté ejecutar ld-elf.so.1pero cada vez aparece un error de segmentación.

El vinculador/intérprete dinámico debe compilarse como independiente de la posición ( -pie) y no puede depender de objetos compartidos ni utilizar otro intérprete.

Respuesta2

Para mis rootfs uso UFS.

Es una pena, porque la respuesta de ZFS es bastante simple. Quizás lo veas como una razón para cambiar.

Siempre que las partes estáticas del sistema operativo estén todas en un conjunto de datos, se crea un ZFSclondel conjunto de datos, móntelo en algún subdirectorio, modifique el cargador (o lo que quiera modificar) allí y luego cree una cárcel con ese subdirectorio como raíz. Esto proporciona una copia de copia en escritura de su sistema operativo pero con el cargador modificado,en el lugarcomo sería si se instalara como cargador principal (queesen lo que respecta a la cárcel).

(TrueOS mostró el camino con esto, al tener un gran conjunto de datos para la raíz y /usrpodar efectivamente puntos para conjuntos de datos separados como /var/*, /tmpy /usr/{obj,src,ports,jails,home}).

Lo que este enfoque elimina es el largo proceso descrito en la jailpágina del manual y en el capítulo 14 delManual de FreeBSD, para configurar el árbol del directorio de la cárcel, lo que implica crear una copia completa del sistema operativo dentro del directorio raíz de la cárcel. Un clon de ZFS es una copia en escritura rápida que toma como origen el conjunto de datos raíz real.

información relacionada