我試圖實現dyld所做的一些部分,我有點卡在存根蹦牀。如何解決dyld導入的符號?
考慮以下ARM指令:
BL 0x2fec
它與分支鏈路(子過程調用)0x2fec。我意識到__TEXT段中有一段__symbolstub1開始於0x2fd8,所以它跳轉到__symbolstub1中的20個字節。
現在,有一個符號
(undefined) external _objc_autoreleasePoolPush (from libobjc)
,我已經通過LC_SYMTAB加載命令解決。沒有提供已知的地址。我知道,事實上,0x2fec地址是_objc_autoreleasePoolPush的蹦牀,但我無法通過任何方式證明它。
我已檢查LC_DYLD_INFO_ONLY命令,我在那裏有輕微的暗示,在lazy_bind符號,我發現:
{:offset=>20, :segment=>2, :library=>6, :flags=>[], :name=>"_objc_autoreleasePoolPush"}
其中名稱和偏移匹配什麼我有完全和庫#6是「/usr/lib/libobjc.A.dylib」,這也是完美的。現在問題是段#2是__TEXT,但是__TEXT從0x1000開始,並且__symbolstub1在0x2fd8處下行。所以我錯過了一些參考。
上我應該如何映射0x2fec虛擬地址到_objc_autoreleasePoolPush任何想法?
我想這可能是有趣的你閱讀這些職位(形容英特爾架構,但無論如何): http://www.codeproject.com/Articles/187181/Dynamic-Linking-of-Imported -Mun-O功能 http://www.codeproject.com/Articles/187192/Redirection-of-Imported-Functions-in-Mach-O 或俄語: http://habrahabr.ru /後/ 115558 – shoumikhin 2012-06-08 05:48:52