• IOS 命令行工具开发


    例子  我们需要查看手机APP里面的某个应用的架构

    新建一个Single View App 的ios项目 ToolCL

    然后在 main函数中加入以下代码

    //
    //  main.m
    //  ToolCL
    //
    //  Created by zsj on 2018/8/10.
    //  Copyright © 2018年 ITpower. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    #import <mach-o/loader.h>
    #import <mach-o/fat.h>
    
    /**
     @param argc 入参个数
     @param argv 入参数组  argv【0】为可执行文件路径
     */
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            if(argc==1 ){
                printf("-l 查看MachO信息
    ");
                return 0;
            }
            
            if (strcmp(argv[1], "-l")!=0) {
                printf("-l 查看MachO信息
    ");
                return 0;
            }
            //优酷视频APP 的mach-o文件的地址
            NSString *path = @"/private/var/mobile/Containers/Bundle/Application/72B419F5-0200-48D7-964C-20954B77E00B/Youkui4Phone.app/Youkui4Phone";
            NSFileHandle *handle=[NSFileHandle fileHandleForUpdatingAtPath:path];
            
            int length= sizeof(uint32_t);
            //读取前面4个字节(magic
    umber魔数用来标识文件类型)
            NSData *magicData=[handle readDataOfLength:length];
            //魔数 文件类型
            uint32_t magicNumber;
            [magicData getBytes:&magicNumber length:length];
            if (magicNumber==FAT_CIGAM ||magicNumber==FAT_MAGIC) {
                printf("FAT文件
    ");
            }else if (magicNumber==MH_MAGIC || magicNumber==MH_CIGAM){
                printf("非64bit架构文件
    ");
            }else if (magicNumber==MH_MAGIC_64 || magicNumber==MH_CIGAM_64){
                 printf("64bit架构文件
    ");
            }else{
                printf("读取失败");
            }
            printf("magicNumber=0X%x
    ",magicNumber);
            [handle closeFile];
            return 0;
        }
    }

    然后选择Release 真机编译 不选择真机执行命令会报下面的错误

    Bad CPU type in executable 

    找到可执行文件 找到手机系统的SpringBoard 将它的权限导出 然后赋值个刚刚生成的可执行文件 

    然后将可执行文件放入手机的user/var/bin 目录下 然后给可执行文件赋予执行权限 chmod +x /usr/bin/ToolCL

    至此命令工具类就开发完毕了

    可能出现的问题 如果出现 Killed: 9  每次将可执行文件删除再放入新的即可解决

     

  • 相关阅读:
    腾讯2017校招编程:一个数等于两个素数的和
    人类简史:从动物到上帝
    讨论:研发团队到底应该是制定OKR还是制定KPI?
    绩效主义毁了索尼
    研发团队是该制定OKR还是KPI?
    一切不行,都是“人”的不行?
    能力陷阱:能力越强,越容易失败
    一个好的产品经理到底有多么重要?
    管理:不会把目标翻译成任务,要你何用?
    做一个有产品思维的研发:Scrapy安装
  • 原文地址:https://www.cnblogs.com/ZhangShengjie/p/9456323.html
Copyright © 2020-2023  润新知