设计素材网站黄金烤肠,c#网站开发模板,如何制作自己的网站和app,英文外链seo兼职在哪里找下面来讲讲如何从Mach-o文件中分析出类名和方法名#xff0c;也让我们了解下class-dump的原理。 Mach-o结构有两个节#xff1a;__objc_classname 和 __objc_methname 其中就是类名和方法名。 其中__objc_classname的偏移为#xff1a;ox7961 __objc_methname的偏移为0x6… 下面来讲讲如何从Mach-o文件中分析出类名和方法名也让我们了解下class-dump的原理。 Mach-o结构有两个节__objc_classname 和 __objc_methname 其中就是类名和方法名。 其中__objc_classname的偏移为ox7961 __objc_methname的偏移为0x6F9E 这里分析的arch文件不是fat binary所以不用加上arch的偏移。 用UE打开文件来到0×7961处 这里正是我们的类名。 再来到0x6F9E处 这里便是方法名。 那怎么把类名和方法名联系起来呢 其实每一个类的虚拟地址都保存在__objc_classlist中。 来到 0x80A0处 第一个虚拟地址为0x0000C78C 可以找到这地址在节__objc_data中而且是起始地址所以我们来到该节文件偏移处 0x878C 此处的结构为 1 2 3 4 5 6 7 8 9 10 typedef struct objc_class{ unsigned long long isa; unsigned long long wuperclass; unsigned long long cache; unsigned long long vtable; unsigned long long data; unsigned long long reserved1; unsigned long long reserved2; unsigned long long reserved3; }objc_class; 关键的信息存储在data中 data的虚拟地址为0x0000C5D8而这个虚拟地址在节__objc_const中。所以在文件中的偏移地址虚拟地址-节起始地址节的文件偏移。 0x0000C5D8-0x0000C0B80x80B8 0x85D8 此处的结构为 1 2 3 4 5 6 7 8 9 10 11 12 13 typedef struct objc_classdata{ long long flags; long long instanceStart; long long instanceSize; long long reserved; unsigned long long ivarlayout; unsigned long long name; unsigned long long baseMethod; unsigned long long baseProtocol; unsigned long long ivars; unsigned long long weakIvarLayout; unsigned long long baseProperties; } 其中的name虚拟地址为0x00B961在节__objc_classname 按上面的公式转换为文件偏移0×7961 所以第一个类名为AppDelegate。 baseMethod的虚拟地址为0x00C518在节__objc_const转换为文件偏移0×8518 前4个是entsize后4个是该类拥有方法的个数接着以12个字节为单位前4个字节是方法名中间4个是方法类型后4个字节是imp分别是每一个方法的信息。 我们得到第一个方法的name虚拟地址为0x0000AFAC在节__objc_methname转换为文件偏移0x6FAC 方法名为dealloc。class-dump-z 看一下 其它的大家可以自己分析~~~ 转载自http://www.blogfshare.com/ioss-mach-o-dump.html