Freebsd

FreeBSD 測試 rtld

  • March 22, 2020

由於某些原因,我試圖修改和測試我自己的 rtld 版本(ld-elf.so.1)。每次更改此連結器後,我都需要重新啟動系統,從 CD/DVD 啟動它,在 /libexec/ 中安裝我的版本並再次重新啟動系統。有時它甚至因為分段錯誤而無法執行使用者空間。我在這樣的過程中浪費了很多時間。

我想問一下如何從命令行啟動此連結器,而無需在 /libexec 中重新安裝我的 rtld 並重新啟動系統。是否可以像 Linux /lib/ld-linux.so.2 一樣執行 rtld?

我嘗試執行 ld-elf.so.1 但每次遇到分段錯誤。可能我錯過了 rtld 命令行中的一些參數。有什麼建議如何從命令行執行 rtld?

也許我可以更改我的執行檔的預設解釋器?

編輯:作為我的 rootfs 的文件系統,我使用 UFS。

是否可以像 Linux 一樣執行 rtld /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) 並且本身不能依賴於共享對象,或者使用另一個解釋器。

引用自:https://unix.stackexchange.com/questions/574204