【转】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> 将头文件放到这个目录,而不是当前目录
【转】Objective-C Class Dump的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- PMON failed to acquire latch, see PMON dump
前几天,一台Oracle数据库(Oracle Database 10g Release 10.2.0.4.0 - 64bit Production)监控出现"PMON failed to a ...
- oracle dump数据库
最近正在看老白的<DBA的思想天空>,了解数据块结构,想通过dump data block验证oracle对于行尾的NULL,是不占用存储空间的. 我们先来看一下怎样dump数据块: 1. ...
- Dump类型说明
通过使用windbg提供DbgHelp库中的MiniDumpWriteDump函数在程序崩溃时写dump文件记录程序当时状态,为后续分析问题提供现场. 该函数提供了DumpType参数,让程序员根据具 ...
- 使用GDB 追踪依赖poco的so程序,core dump文件分析.
前言 在windows 下 系统核心态程序蓝屏,会产生dump文件. 用户级程序在设置后,程序崩溃也会产生dump文件.以方便开发者用windbg进行分析. so,linux 系统也有一套这样的东东- ...
- 转:CentOS, 找不到dump命令:command not found
dump 功能说明:备份文件系统.语 法:dump [-cnu][-0123456789][-b <区块大小>][-B <区块数目>][-d <密度>][-f &l ...
- slave IO流程之二:注册slave请求和dump请求
slave IO流程已经在http://www.cnblogs.com/onlyac/p/5815566.html中有介绍 这次我们要探索注册slave请求和dump请求的报文格式和主要流程. 一.注 ...
- 使用MAT(Memory Analyzer Tool)工具分析dump文件--转
原文地址:http://gao-xianglong.iteye.com/blog/2173140?utm_source=tuicool&utm_medium=referral 前言 生产环境中 ...
- 认识Java Core和Heap Dump
什么是Java Core和Heap Dump Java程序运行时,有时会产生Java Core及Heap Dump文件,它一般发生于Java程序遇到致命问题的情况下. 发生致命问题后,Java进程有时 ...
- sublime text 乱码生成.dump问题的解决方法
title: sublime text 乱码生成.dump问题的解决方法 tags: sublime text,sublime text 3,.dump,乱码 grammar_cjkRuby: tru ...
随机推荐
- 斯坦福第十三课:聚类(Clustering)
13.1 无监督学习:简介 13.2 K-均值算法 13.3 优化目标 13.4 随机初始化 13.5 选择聚类数 13.1 无监督学习:简介 在这个视频中,我将开始介绍聚类算法.这将是一个 ...
- node四大优势 转
1. Nodejs基于Javascript语言,不用再单独新学一门陌生的语言,从而减低了学习的门槛.同时,Javascript语言在Web前端开发中至关重要,特别HTML5的应用必须要使用,所以前后台 ...
- haskell中的cps
cps全称叫continuation passing style,简要来讲就是告诉函数下一步做什么的递归方式,由于普通递归有栈溢出的问题,而cps都是尾递归(tail recursion),尾递归则是 ...
- Visual Stuido 在文件中查找不显示结果
出现好几次了.解决方法如下: 注册表找到 HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InPr ...
- 基于QT的webkit与ExtJs开发CB/S结构的企业应用管理系统
一:源起 1.何为CB/S的应用程序 C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与服务端通信,完成一定的 ...
- unity3D——自带寻路Navmesh入门教程(二)(转)
转自:http://liweizhaolili.blog.163.com/blog/static/16230744201271210237616/ 上一节简单介绍了NavMesh寻路的基本用法,这次来 ...
- ciancd开源
github 开源项目:ciandcd : https://github.com/ciandcdjenkins:https://github.com/ciandcd/jenkins-awesomec ...
- 解析json实例
解析项目目录中的一个json文件,将之转化为List的一个方法. package com.miracles.p3.os.util; import com.miracles.p3.os.mode.Vid ...
- atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
)----列表查询建模 1. 配置条件字段@Conditional 1 2. 配置条件字段显示类型为range----@Conditional(displayType = displayType.ra ...
- DataGridViewComboBoxColumn值无效
值无效,可能是你下拉框选项,没有这样的值,而你却设置这个值. dataGridView1.Rows[i].Cells[].Value = "选项一"; 解决方法就是在窗体的构造函数 ...