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信息\n");
            return 0;
        }
        
        if (strcmp(argv[1], "-l")!=0) {
            printf("-l 查看MachO信息\n");
            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\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_MAGIC || magicNumber==MH_CIGAM){
            printf("非64bit架構文件\n");
        }else if (magicNumber==MH_MAGIC_64 || magicNumber==MH_CIGAM_64){
             printf("64bit架構文件\n");
        }else{
            printf("讀取失敗");
        }
        printf("magicNumber=0X%x\n",magicNumber);
        [handle closeFile];
        return 0;
    }
}

然后選擇Release 真機編譯 不選擇真機執行命令會報下面的錯誤

Bad CPU type in executable 

找到可執行文件 找到手機系統的SpringBoard 將它的權限導出 然后賦值個剛剛生成的可執行文件 

然后將可執行文件放入手機的user/var/bin 目錄下 然后給可執行文件賦予執行權限 chmod +x /usr/bin/ToolCL

至此命令工具類就開發完畢了

可能出現的問題 如果出現 Killed: 9  每次將可執行文件刪除再放入新的即可解決

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM