我想了解glibc動態鏈接器是如何工作的。我知道_dl_fixup在_dl_runtime_resolve中被調用,並解決了重定位問題。所以我認爲只有在鏈接器啓動並加載了一些庫之後纔會調用它。但是當我在其中進行一些打印工作時,我發現該函數甚至在_dl_start之前被調用。令人困惑的是:爲什麼被稱爲?它做了什麼工作?爲什麼在動態鏈接器啓動之前調用_dl_fixup?
我做了一些打印工作,函數正在處理像strncpy,fopen,fread64等符號,但對象名稱(l-> l_name)似乎爲空。
I add print sentences in _dl_start and _dl_fixup
I make glibc and test the ld.so, I found "_dl_fixup" appears before and after "_dl_start"
對不起有線的方式來鏈接圖片,我只能職位上工作兩..
我用GDB調試連接器,我覺得自己的gdb使用_dl_fixup來完成一些任務。如果我沒有使用gdb,只會在_dl_start之後調用_dl_fixup。
感謝您的回答!我鏈接了兩個關於細節的圖片,你能指出我的錯誤嗎?:) – liubenxi