通過Mach-O獲取方法名類名

未完待續(xù)....
下面的代碼還是有問題的, 只能找非fat類型的 Mach-O , 正在寫 fat類型的
uint64_t FilegetSize(const char *file_path){
    struct stat buf;
    if ( stat(file_path,&buf) < 0 )
    {
        perror(file_path);
        exit(1);
    }
    return buf.st_size;
}


void loadMachO()
{
    filePath = [[[NSBundle mainBundle] pathForResource:@"ZhaNiao_pjf-mobile" ofType:@""] UTF8String];
    
    FILE *fp_open = fopen(filePath,"r");
    uint64_t file_size = FilegetSize(filePath);
    if(!fp_open){
        printf("file isn't exist\n");
        exit(1);
    }
    printf("file size is 0x%llx\n\n",file_size);
    void *file_buf = malloc(file_size);
    if(fread(file_buf,1,file_size,fp_open)!=file_size){
        printf("fread error\n");
        exit(1);
    }
    fclose(fp_open);
    
    //檢查是否為Fat頭
    struct fat_header* fileStartAsFat = (struct fat_header*)file_buf;
    if(fileStartAsFat->magic==FAT_CIGAM||fileStartAsFat->magic==FAT_MAGIC){
        printf("is fat\n");
        //        exit(1);
    }
    
    //檢查mach-o文件最前面幾個字節(jié)的內(nèi)容.
    struct mach_header *mh = (struct mach_header*)file_buf;
    int is32 = 1;
    
    if(mh->magic==MH_MAGIC||mh->magic==MH_CIGAM){
        is32 = 1;
    }
    else if(mh->magic==MH_MAGIC_64||mh->magic==MH_CIGAM_64){
        is32 = 0;
    }
    
    const uint32_t cmd_count = mh->ncmds;
    
    const struct load_command* const startCmds    = (struct load_command*)(((uint8_t*)mh) + sizeof(struct mach_header));
    //獲取command段結(jié)束的地址,endCmds = mach-o地址 + mach-o頭部長度 + cmds所用的長度
    const struct load_command* cmd = startCmds;
    
    for (uint32_t i = 0; i < cmd_count; ++i) {
     
        uint32_t cmdLength = cmd->cmdsize;
        
        struct segment_command * segCmd;
        
        const struct load_command* const nextCmd = (const struct load_command*)(((char*)cmd)+cmdLength);
        
        switch (cmd->cmd) {
            case LC_SEGMENT:
            {
                segCmd = (struct segment_command *)cmd;
                NSLog(@"segname = %s",segCmd->segname);
                

             
                if (strcmp(segCmd->segname, "__TEXT") == 0) {
                    
                    
                    struct section * sectionsStart = NULL;
                    struct section * nextSection = NULL;
                    for (int i = 0; i < segCmd->nsects; i++) {
                        
                        if (i == 0) {
                            sectionsStart = (struct section *)((char *)cmd + sizeof(struct segment_command));
                            nextSection = sectionsStart;

                        }else
                        {
                            nextSection = (struct section *)((char *)nextSection + sizeof(struct section));
                        }
                        
                        if (strncmp(nextSection->sectname, "__objc_methname", strlen("__objc_methname"))==0) {
                            NSLog(@"***** 修改方法名 ****");
                            
                            
                            
                        }
                        if (strncmp(nextSection->sectname, "__objc_classname", strlen("__objc_classname"))==0) {
                            NSLog(@"***** 修改類名 *****");
                         
                        }
                  
                        NSLog(@"sectionName = %s , segName = %s",nextSection->sectname,nextSection->segname);
                        
                        
                        
                    }

                    
                }
                
                
                
                
            }
                break;
                
            default:
                break;
        }
        cmd = nextCmd;
    }

}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末虚吟,一起剝皮案震驚了整個濱河市鞍爱,隨后出現(xiàn)的幾起案子黔龟,更是在濱河造成了極大的恐慌,老刑警劉巖德澈,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡丛肮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門魄缚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宝与,“玉大人焚廊,你說我怎么就攤上這事∠敖伲” “怎么了咆瘟?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诽里。 經(jīng)常有香客問我袒餐,道長,這世上最難降的妖魔是什么须肆? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任匿乃,我火速辦了婚禮,結(jié)果婚禮上豌汇,老公的妹妹穿的比我還像新娘幢炸。我一直安慰自己,他們只是感情好拒贱,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布宛徊。 她就那樣靜靜地躺著,像睡著了一般逻澳。 火紅的嫁衣襯著肌膚如雪闸天。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天斜做,我揣著相機與錄音苞氮,去河邊找鬼。 笑死瓤逼,一個胖子當著我的面吹牛笼吟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播霸旗,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼贷帮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诱告?” 一聲冷哼從身側(cè)響起撵枢,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎精居,沒想到半個月后锄禽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡箱蟆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年沟绪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片空猜。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡绽慈,死狀恐怖恨旱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坝疼,我是刑警寧澤搜贤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站钝凶,受9級特大地震影響仪芒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耕陷,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一掂名、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哟沫,春花似錦饺蔑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隆敢,卻和暖如春发皿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拂蝎。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工穴墅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人温自。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓封救,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捣作。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這篇文章算是對前面那篇動態(tài)注入 dylib 到 Mac 應用的一個細節(jié)補充, 主要針對使用的開源庫yololib和...
    MD5Ryan閱讀 3,375評論 2 3
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,237評論 0 4
  • Mach-O 概述 和 部分命令介紹 我們知道Windows下的文件都是PE文件鹅士,同樣在OS X和iOS中可執(zhí)行文...
    青花瓷的平方閱讀 14,917評論 2 52
  • 推開吱呀的木門券躁,抬頭就看到燒火灶在靠左手邊那面墻的中心位置,靜靜立著掉盅。灶頭的瓷磚永遠那么白也拜,灶具整整齊齊放在一...
    離洛殊閱讀 161評論 0 1
  • 從雙廊回來一段時間了,心猶在趾痘,身歸來慢哈。一直想著要說點什么,嘿嘿永票,說了是“偽”攻略來的卵贱,我不會說去哪里怎么便宜滥沫、有哪...
    火水相生閱讀 199評論 0 1