最新消息:

[iOS Hacker] class-dump 分析类方法名称的原理

iOS/MacOSX/移动安全 exchen 197浏览 0评论

class-dump 分析类方法名称的原理

class-dump 可以将应用的头文件导出,头文件里包含了应用的类名和方法名的对应关系,我们来分析一下实现的原理。

在数据段中有一个 __objc_classlist 节,存放着每个类的信息保存的地址,比如图中 0x0000C048 地址上保存着数据 0x0000C644,这个数据就是表示 AppDelegate 类的信息保存的地址

类信息的结构体定义如下

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;

到 0x0000C644 来看看有什么信息,0x0000C644 是属于数据段 __objc_data 节,通过 MachOView 看到的信息如图

其中的 Data 数据是 0x0000C5FC,保存着类的数据信息,结构体定义如下

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;
}

在数据段的 __objc_const 节中查看 0x0000C5FC 的信息,如图

其中 Name 地址里的数据是 0xB7A6, 保存的字符串是在代码段的 __objc_classname 节中,在 0xB7A6 保存的果然是 AppDelegate 字符串

然后返回到 __objc_const 节 0x0000C5FC 处,其中 Base Methods 地址里的数据是 0x0000C53C,到 0x0000C53C 来看看,可以看到这个类的相关的方法都在这里

其中 application:didFinishLaunchingWithOptions: 这个方法的地址是在 0xAE40,字符串保存在代码段的 __objc_methname 节中,如图

转载请注明:exchen's blog » [iOS Hacker] class-dump 分析类方法名称的原理

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址