int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
因为命令行工具不需要UI界面,所以main函数改成
int main(int argc, char * argv[]) {
@autoreleasepool {
return 0;
}
}
App架构类型
int main(int argc, char * argv[]) {
@autoreleasepool {
NSString *appPath = @"app路径";
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:appPath];
int length = sizeof(uint32_t);
//读取最前面的4个字节(Magic number, 魔数, 用来标识文件类型)
NSData *magicData = [handle readDataOfLength:length];
//魔数,用来标识文件类型
uint32_t magicNumber;
[magicData getBytes:&magicNumber length:length];
if (magicNumber == FAT_CIGAM || magicNumber == FAT_MAGIC) {
//大小端(高、低地址读取)
printf("FAT文件\n");
} else if (magicNumber == MH_CIGAM || magicNumber == MH_MAGIC) {
printf("非64bit文件\n");
} else if (magicNumber == FAT_CIGAM_64 || magicNumber == FAT_MAGIC_64) {
printf("64bit架构文件\n");
} else {
printf("读取失败");
}
printf("magic number = 0x%x\n", magicNumber);
[handle closeFile];
return 0;
}
}
生成的可执行文件拖入iPad以下文件夹
image.png使用
image.png image.png权限出问题
签名-给可执行文件签上一定的权限,让它可以访问其他App的可执行文件
通过ldid给可执行文件签名(仅权限)
image.png代表追加到文件尾部,>代表覆盖。
cd到存放可执行文件的文件夹中导出权限文件
image.png得到
image.png双击打开可以看到权限很少
image.png找一个包含所有权限的可执行文件(比如SpringBoard),导出权限文件
image.png image.png然后将这个包含所有权限的权限文件导入到我们需要增加权限的权限文件(将两个权限文件放在同一个文件夹中)
执行操作
image.png删除原来的testCommand.entitlements文件,重新导出权限文件可以看到权限
image.png重新签好的权限可执行文件重新拖入iPad
image.pngchmod +x /usr/bin/testCommand
添加脚本,使得生成的执行文件夹在工程目录下
image.png image.png
网友评论