2015-12-11 74 views
1

我想了解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。

回答

0

因此,我認爲它只是連接後開始叫,並加載一些庫

這是正確的。

我找到函數甚至_dl_start

之前調用這是不正確的:_dl_fixup_dl_start後調用。

不幸的是,您沒有提供任何關於如何得出不正確結論的細節,因此不可能告訴您您犯了什麼錯誤,但您確實犯了(至少一個)錯誤。

+1

感謝您的回答!我鏈接了兩個關於細節的圖片,你能指出我的錯誤嗎?:) – liubenxi

相關問題