美文网首页
判断app是什么架构

判断app是什么架构

作者: i诺离 | 来源:发表于2020-02-17 15:41 被阅读0次

    读取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];
    

    相关文章

      网友评论

          本文标题:判断app是什么架构

          本文链接:https://www.haomeiwen.com/subject/bqwbfhtx.html