2016-12-19 13 views
1

あなたはARM64の次のスニペットで見ることができるように、これは単に、なぜそれが上記のような特定のアドレスをロードしないiOSの10ARMがこのようなレジスタにアドレスを割り当てるのはなぜですか?

fffffff0073de41c   adrp  x22, #0xfffffff0075ef000 
fffffff0073de420   ldr  x0, [x22, #0x330] 

のためにカーネルからであることを起こりますか? 0xfffffff0075ef000 + 0x350は、あらかじめコンパイルされているため、アドレス0xfffffff0075ef330をロードするだけでは意味がありません。

ご迷惑をおかけして申し訳ありません。

+1

単一の命令がアドレス全体のロードをエンコードできないか、同じベースを使用して複数のアドレスが形成されているためです。 ARM64の仕様はわかりませんが、任意の64ビットアドレスを32ビット幅の命令に収めることはできません。 –

+0

@RossRidgeベースはどのように格納されていますか、それはどのようにマシンによって認識されますか? – Aidan

+3

これはX22に格納されており、後の手順で使用できます。 'ldr x1、[x22、#0x10]'のように言ってください。 –

答えて

1

アドレス全体を読み込むには、より多くの命令が必要です(通常、64ビットの即値をロードするには4つの命令が必要です)。

おそらくADRと協力して、ADRP命令の目的は、必要とする即値をロードするよりも少ない命令でシンボルのアドレスを使用できるようにすることです。

関連する問題