例子 我們需要查看手機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 真機編譯 不選擇真機執行命令會報下面的錯誤
找到可執行文件 找到手機系統的SpringBoard 將它的權限導出 然后賦值個剛剛生成的可執行文件
然后將可執行文件放入手機的user/var/bin 目錄下 然后給可執行文件賦予執行權限 chmod +x /usr/bin/ToolCL
至此命令工具類就開發完畢了
可能出現的問題 如果出現 Killed: 9 每次將可執行文件刪除再放入新的即可解決