《iOS 三问》 -- iOS 系统的交叉编译

本教程主要是记录怎样在 iPhone 越狱手机上,由 c 源码或 oc 源码编译出来命令行程序并运行之。

为什么我们要自己手动编译源码并在越狱 iPhone 手机上执行?

  1. 用于研究使用,方便我们剖析 Mach-o 结构程序及其方面的知识;
  2. 方便我们自己制作工具为平时工作提供便利;
  3. 等等(暂时还没想到,哈哈 @_@

PS: 后面有空的话我可以会补充下怎样直接在 iPhone 上安装 Vi+Clang 自己实现代码的编辑加编译~这样就可以直接在手机端操作了,敬请期待。

1 总述

iOS 系统的交叉编译主要分以下几步:

  1. 源码编写;
  2. 编译;
  3. 签名;
  4. 推送 iPhone 及运行

2 源码编写

下面直接给个最简单的源码,C & OC 的。

c 源码
1
2
3
4
5
#include "stdio.h"

int main(int argc, char const *argv[]) {
printf("Hello world!\n");
}
OC 源码
1
2
3
4
5
6
7
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"Hello iOS!");
}
return 0;
}

3 编译

这里要注意的是,要根据您的 iPhone 型号选择 CPU 型号,我这里是 iPhone6,使用 arm64。

C 编译

C 源码编译
1
xcrun -sdk iphoneos clang -arch arm64 -o test test.c

OC 编译,与 C 差不多,注意带上链接时用到的库

OC 源码编译
1
xcrun -sdk iphoneos clang -arch arm64 -o test test.m -framework Foundation

4 签名

1
ldid -S test

5 推送 iPhone 及运行

然后将程序使用 scp 命令拷到 iPhone 上,并直接运行之就可以了。

1
scp ./test root@IP:/bin

6 引用

【1】王孟发 - mac 和 iPhone 命令生成可执行文件的区别
【2】小鱼周凌宇 - iOS攻防——(一)ssh登陆与交叉编译