Полагаю, у вас есть ld -e
точка входа, которая затем использует семейство функций dlopen()
, чтобы найти и загрузить остальную часть динамического компоновщика. Конечно, вам нужно убедиться, что сам dlopen()
либо статически связан, либо вам, возможно, придется реализовать достаточно своей собственной заглушки компоновщика (используя интерфейсы системных вызовов, такие как mmap()
, как это делает сама libc).
Ничто из этого не звучит "хорошо" для меня. На самом деле, одной лишь мысли о прочтении исходных кодов glibc (и исходного кода ld-linux
, в качестве одного примера), достаточной для оценки объема работы, мне кажется довольно печальной. Это также может быть кошмар переносимости. Могут быть серьезные различия между тем, как Linux реализует ld-linux
, и тем, как выполняются связи в OpenSolaris, FreeBSD и так далее. (Я не знаю).