私はdyldがやっていることのいくつかの部分を実装しようとしています、そして、私はスタブトランポリンでちょっと立ち往生しています。 0x2fecへのリンク(サブプロシージャコール)とインポートされたシンボルのdyldを解決するにはどうすればよいですか?
BL 0x2fec
これブランチ:
は、以下のARM命令を考えてみましょう。私は、0x2fd8から始まる__TEXTセグメントにセクション__symbolstub1があることを知っています。したがって、__symbolstub1の中の20バイトにジャンプします。
さて、私はLC_SYMTAB loadコマンドを通じて解決したシンボル
(undefined) external _objc_autoreleasePoolPush (from libobjc)
があります。既知のアドレスはありません。私は事実として、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のところにあります。だから私はセクションにいくつかの参照を欠場しています。
どのように私は_objc_autoreleasePoolPushに0x2fec仮想アドレスをマップすると思いますか?
私は(とにかくIntelアーキテクチャを説明したが、)あなたはこれらの記事を読んですることは興味深いものになることができると思います: http://www.codeproject.com/Articles/187181/Dynamic-Linking-of-Imported機能-in-Mach-O http://www.codeproject.com/Articles/187192/Redirection-of-Imported-Functions-in-Mach-O またはロシア語: http://habrahabr.ru/post/115558 – shoumikhin