iOSのJailbreak環境で64bit ARM(AARCH64)のバイナリを試してみた。
64bit ARMは、AARCH64というアーキテクチャの64bit CPUで、ARM v7やARM v7sの32bitのARMとは単純な拡張だけでなく割と別物なようだ。ARM v8と書くよりもARM64と書くみたいだ。
iPhone5sやiPad Air,iPad mini Retinaという2013年秋に発売されたiOS機はA7という64bit ARM CPUを搭載しており、いち早く64bit ARM用のソフトを自作して動かすことができる。
ということで、iPad mini Retina実機をJailbreakして実際に試してみた。
1. 使ったもの
・iPad mini Retina WiFi版(iOS7)
・MacBook Air (Mac OS X Mavericks)
2. 準備
(1)iPad mini RetinaをJailbreakする
→ iPad mini Retina(iOS7)をJailbreakしてみた
(2)MacBook(Mac OS X)に開発環境Theosを入れる
→ iOSのJailbreak環境用の脱獄アプリ開発環境Theosをインストールしてみた
3. 手順
TheosをインストールしたMac上で下記のコマンドを入力する。
$THEOS/bin/nic.pl
次のように表示される。
NIC 1.0 - New Instance Creator ------------------------------ [1.] iphone/application [2.] iphone/library [3.] iphone/preference_bundle [4.] iphone/tool [5.] iphone/tweak Choose a Template (required):
ここで「iphone/tool」の
4
を入力し、次に
Project Name (required):
と聞かれるのでアプリ名として例えば
test64bit
と入力する。
次に、パッケージ名を聞かれるので、デフォルトのままにする。
次に、製作者名を聞かれるので、デフォルトのままにする。
あとは勝手にアプリのプロジェクト一式が自動生成される。(作業フォルダで実行すること)
作成された内容はこんな感じ。
cd test64bit ls
Makefile control main.mm theos
作成されたフォルダ内に、Makefileとソースファイルmain.mmがあるので、まずmain.mmを次のように変更した。
int main(int argc, char **argv, char **evnp) { #ifdef __LP64__ printf("64bitn"); #else printf("32bitn"); #endif printf("Hello world.n"); return 0; }
makeコマンドでビルドする。
make ARCHS=arm64
ソースファイルにエラーが無ければobjフォルダとその中にアプリが作られる。
作成されたバイナリが64bitになっているかどうかは、次のコマンドで確認ができる。
otool -h -v obj/test64bit
ARM64bitのバイナリであれば次のように表示される。
obj/test64bit: Mach hreader Magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 ARM64 ALL 0x00 ELECUTE 22 1232 NOUNDEFS DYLDLUNK TWOLEVEL PIE
あるいは、
file obj/test64bit
とfileコマンドでも確認できる。
obj/test64bit: Mach-O 64-bit executable
64bitのバイナリの実行ファイルは64bitのiOS機でしか実行することができない。
32bit機でも動かす場合にはFATバイナリという32bitと64bitと両方のコードを同梱すればよい。
make ARCHS='armv7 arm64'
とすればFATバイナリを生成することができる。
Makefileに
export ARCHS=armv7 arm64
というように追加するという方法もある。(普通はこっちの方法かも)
4. 実機で動作確認
作成したtest64bitというファイルを実機に転送する。
実行すると、
64bit Hello world.
と表示された。
ちゃんと64bit ARMのコードが動いているのが確認できた。
(続く)