FreeBSD-Test rtld

FreeBSD-Test rtld

Aus irgendeinem Grund versuche ich, meine eigene Version von rtld (ld-elf.so.1) zu ändern und zu testen. Nach jeder Änderung, die ich an diesem Linker vornehme, muss ich das System neu starten, es von CD/DVD starten, meine Version in /libexec/ installieren und das System erneut neu starten. Manchmal läuft es aufgrund eines Segmentierungsfehlers nicht einmal im Benutzerbereich. Ich verschwende mit einem solchen Verfahren viel Zeit.

Ich möchte fragen, wie ich diesen Linker von der Befehlszeile aus starten kann, ohne mein rtld in /libexec neu zu installieren und das System neu zu starten. Ist es möglich, rtld ähnlich wie Linux /lib/ld-linux.so.2 auszuführen?

Ich habe versucht, ld-elf.so.1 auszuführen, aber jedes Mal erhalte ich einen Segmentierungsfehler. Wahrscheinlich habe ich einige Parameter in der rtld-Befehlszeile übersehen. Irgendwelche Vorschläge, wie man rtld über die Befehlszeile ausführt?

Vielleicht könnte ich den Standardinterpreter für meine ausführbaren Dateien ändern?

Edit: Als Dateisystem für mein Rootfs verwende ich UFS.

Antwort1

Ist es möglich, rtld ähnlich wie Linux auszuführen /lib/ld-linux.so.2?

Ja, die Ausführung /libexec/ld-elf.so.1 /path/to/your_binaryfunktioniert unter FreeBSD genauso gut wie unter Linux.

Vielleicht könnte ich den Standardinterpreter für meine ausführbaren Dateien ändern?

Ja, das können Sie beim Kompilieren von Binärdateien tun, über cc -Wl,-dynamic-linker=/path/to/your_interpreter. Auf diese Weise übergibt gcc/clang Argumente direkt an den Linker. Eine Erklärung dieser und anderer Flags -Wl,..finden Sie auf der Manpage.ld(1)--dynamic-linker

Ich habe versucht, es auszuführen ld-elf.so.1, aber jedes Mal erhalte ich eine Segmentierungsfehlermeldung.

Der dynamische Linker/Interpreter sollte als positionsunabhängig ( -pie) kompiliert werden und darf selbst nicht von gemeinsam genutzten Objekten abhängen oder einen anderen Interpreter verwenden.

Antwort2

Für mein Root-FS verwende ich UFS.

Das ist schade, denn die Antwort von ZFS ist ganz einfach. Vielleicht ist es für Sie ein Grund, umzusteigen.

Solange sich die statischen Teile des Betriebssystems alle auf einem Dataset befinden, erstellen Sie ein ZFSKlondes Datensatzes, mounten Sie ihn in einem Unterverzeichnis, ändern Sie dort den Loader (oder was auch immer Sie ändern möchten) und erstellen Sie dann ein Jail mit diesem Unterverzeichnis als Stammverzeichnis. Dies erstellt eine Copy-on-Write-Kopie Ihres Betriebssystems, jedoch mit dem geänderten Loader.vor Ortals wäre es als Hauptlader installiert (wases istsoweit es das Gefängnis betrifft).

(TrueOS hat es hier mit gutem Beispiel vorangebracht, indem es einen großen Datensatz für die Wurzel verwendet und /usrPunkte für separate Datensätze bei /var/*, /tmp, und effektiv beschneidet /usr/{obj,src,ports,jails,home}.)

Mit diesem Ansatz entfällt der langwierige Prozess jail, der in der Manualpage und im Kapitel 14 desFreeBSD-Handbuch, zum Einrichten des Jail-Verzeichnisbaums, wobei eine vollständige Kopie des Betriebssystems im Stammverzeichnis des Jails erstellt wird. Ein ZFS-Klon ist ein schnelles Copy-on-Write, das den echten Stammdatensatz als Ursprung nimmt.

verwandte Informationen