读取app可执行文件的前四个字节,来判断(这四个字节存放在可执行文件中的头部文件)
根据内核源码查看mach-o文件可发现,不同文件的前四个字节,有自己的宏定义代表
// FAT文件
FAT_CIGAM
FAT_MAGIC
//非64bit架构文件
MH_CIGAM
MH_MAGIC
//64bit架构文件
MH_CIGAM_64
MH_MAGIC_64
代码实现:
NSString *apppath = ".../xxx.app/xxx"
// 使用这个读取文件,可部分读取文件字节,减少内存的占用
NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath: apppath];
int length = sizeof(uint32_t);
// 读取最前面的4个字节(magic number, 魔数,用来表示文件类型)
NSData *magicData = [handle readDataOfLength: length];
// 魔数, 用来标识文件类型
uint32_t magicNumber;
[magicData getBytes: &magicNumer length: length];
if (magicNumner == FAT_CIGAM || magicNumner == FAT_MAGIC) {
printf(" FAT文件\n");
}else if (magicNumner == MH_CIGAM || magicNumner == MH_MAGIC) {
printf(" 非64bit架构文件\n");
}else if (magicNumner == MH_CIGAM_64 || magicNumner == MH_MAGIC_64) {
printf("64bit架构文件\n");
}else {
printf("读取失败 - 0x%x", magicNumber);
}
[handle closeFile];
网友评论