2012-01-18 38 views
3

多くのARMドキュメントを読んだが、BLX命令のデコードに問題がある。ARM/Thumb(IOS)でのBLX命令のデコード

__text:0000347C 02 F0 B2 ED     BLX    _objc_msgSend 

__text:0000469C 01 F0 A2 EC     BLX    _objc_msgSend 

これらの両方をここに見られるように同じ場所、仮想アドレス0x5FE4に行くことになっている:ここでは2つの例です

__symbolstub1:00005FE4 38 F0 9F E5     LDR    PC, =__imp__objc_msgSend 

は、しかし、私は計算が使用されているかを把握することはできません命令バイトを使用して上記の2つのアドレス(0x347Cと0x469C)から取得します。 ARMのドキュメントによれば、2で右シフトを使用して、相対的なジャンプと思われるが、数値はうまくいかない。

誰でも手助けできますか?

答えて

6

まず、命令は2つのリトルエンディアンの16ビットフィールドとして出力されます。 ARMリファレンスマニュアルのバイト順序を一致させるには、それぞれのフィールドをバイトワーピングする必要があります。最初の命令のために、それが得られる:

F0 02 ED B2 

又は

11110000000000101110110110110010. 

をこれがBLX命令のT2をコードしています。 ARMで識別フィールドにこれを破る:

11110 0 0000000010 11 1 0 1 1011011001 0 
     S imm10H  J1 J2 imm10L 

そして、フィールドの解釈のための指示に従ってください:

正確 0x5FE4 - 0x3480PCは/親指で4つのバイト先で、覚えている
I1 = NOT(J1 EOR S) = 0 
I2 = NOT(J2 EOR S) = 0 

imm32 = SignExtend(S:I1:I2:imm10H:imm10L:00) 
     = SignExtend(0000000000010101101100100) 
     = 0x00002b64 

Thumb 2)。

私はあなたが2番目の例を自分で処理できると信じています。

+1

詳細な説明はありがとうございます。私はここで見つからなかったドキュメントを見つけました:http://www.scribd.com/doc/74005114/21/Format-19-long-branch-with-link – Locksleyu

関連する問題