• 【转】Objective-C Class Dump


    (转自:http://blog.sina.com.cn/s/blog_4431c7610100x15t.html)

    class dump是一个命令行工具,用来监测存储在Mach-O二进制文件理的Objective-C运行时信息。它为类(class),分类(category)和协议(protocol)生成声明信息。这些信息与 otool -ov 命令提供的信息是一样的,但表示得更像正常的Objective-C的声明,所以它更紧凑,更易读

    为什么要使用class-dump

    对于好奇的人,是一个好工具。你可以看到闭源应用程序,框架(framework)和软件包(bundle)的设计。

    http://www.codethecode.com/download/class-dump-3.3.3.dmg  (2010-08-08)

    http://www.codethecode.com/download/class-dump-3.3.3.tar.bz2

    http://bitbucket.org/nygard/class-dump

    用法

    class-dump [options]

    选项可以是

    -a   显示实例变量偏移

    -A   显示实现地址

    –arch <arch> 选择一个指定的架构,如ppc, ppc7400, ppc64, i386, x86_64

    -C <regex>  只显示同正则表达式匹配的类

    -f <str>    在方法名中查找字符串

    -H  在当前目录生成头文件,或者在用-o选项指定的目录生成

    -I    对类,目录,协议 按照继承关系(inheritance)进行排序(覆盖-s选项)

    -o <dir>  为-H选项指定输出目录

    -r  递归扩展framework,并修复VM共享库

    -s  按名称对classes和categories进行排序

    -S  按名称对方法(method)进行排序

    –list-arches  类出文件中的arches,然后退出

    –sdk-root  指定 SDK root 路径(完全路径,或者 4.1 ,  4.0,  3.2,  10.6 , 10.5, 3.1.3, 3.1.2)

    class-dump-x是一个class-dump的修改版,在当时(2008年) class-dump 3.1.2不支持Objective-C 2.0 ABI). Objective-C 2.0 ABI删除了OBJC段,在data段引入了一些新的section. 并且 class/obj的布局也边了。

    它不生成@property声明,因为所有的properties被映射到方法了。 不创建@property 元素,这样的源码可以与objc 1.0的编译器兼容

    http://iphone.freecoder.org/class-dump-3.1.2-x-1.0.1.tar.bz2 (修改版本)

    http://iphone.freecoder.org/class-dump-x (Leopard上运行的二进制)

    http://iphone.freecoder.org/class-dump-x-iphone  (iPhone运行的二进制)

    class_dump_z 是对上面两个的改进

    为什么需要另外一个class-dump

    因为class-dump-x对ivar offsets的计算也是错误的,并不支持properties

    原版的class-dump虽然也支持ABI2 了,但对ivar 的计算依然是错误的

    class-dump-z 主要针对 iPhone 程序进行dump, 不支持以下特性

    64位(除非以后iPhone上的内存超过4G了)

    Objective-C 1.0 ABI(iPhone用2.0)

    class-dump-z完全用C++重写,避免动态调用,不像class-dump和class-dump-x那样使用Objective-c写。删除不必要的调用,使得class-dump-z比它的前任们快10倍左右。并且可以在Linux,Mac, iPhone上运行

    选项

    -p  转换未声明的getters和setters为properties

    -h proto  隐藏那些已经出现在 协议中的方法

    -h super  隐藏继承来的方法

    -y <root>  选择sysroot, 默认是最后一版的iPhoneOS SDK 或者 /

    -u <arch> 选择指定的架构( armv6, armv7等)

    -a   打印ivar 偏移

    -A  打印 实现的VM地址

    -k  显示额外的注释

    -k -k 显示更多注释

    -R  显示指针声明 , int *a 而不是 int* a(因为前者更明显地表达了指针的语义)

    -N  保持原始结构名 (不用 CFArrayRef代替 __CFArray)

    -b   在 +/- 号之后放一个空格,  也就是 + (void) ,而不是 +(void)

    -i  <file> 读取并更新签名提示文件

    -C  <regex>  只显示匹配的types

    -f  <regex> 只显示匹配的methods

    -g    只显示导出classes

    -X <list>  忽略所有types(除了categories)

    -h cats  隐藏categories

    -h dogs 隐藏协议(这哥们太幽默了,上面是cats(分类),这里就是dogs了

    -S    将types按字幕顺序排序

    -s     将方法按字母顺序排序

    -z     按照字母顺序对方法排序,但将class方法和 -init 放在最见面

    -H    分离头文件

    -o <dir> 将头文件放到这个目录,而不是当前目录

  • 相关阅读:
    MySQL数据库优化【笔记】_索引的创建和删除(ALTER TABLE方式)
    [C#基础知识]泛型Dictionary<string,string>的用法详解
    权重衰退
    softmax回归
    交叉熵损失函数
    线性回归
    极大似然估计
    【SpringBoot-消息 02】
    【SpringBoot-cache 01】
    【JavaWeb 实际项目_Cookie&Session 06】
  • 原文地址:https://www.cnblogs.com/ydhliphonedev/p/3343644.html
Copyright © 2020-2023  润新知