iOSのJailbreak環境で64bit ARM(AARCH64)のバイナリを試してみた

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のコードが動いているのが確認できた。

(続く)




コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.

14 − = 10