/choose

抽离cycript里面的choose功能

Primary LanguageObjective-C

众所周知,对于逆向或者日常开发dubug来说,ctcript是一个非常棒的工具。

尤其是它里面的choose 功能。 因为它的用法简单传一个类名或者地址进去就能找出内存中该类对象的实例 choose(ClassName) 如:

cy# choose(MMUINavigationController)
[#"<MMUINavigationController: 0x10d001200>",#"<MMUINavigationController: 0x10e0b7800>"]
cy# choose(UIButton)
[#"<FixTitleColorButton: 0x1115734d0; baseClass = UIButton; frame = (170 18; 130 47); clipsToBounds = YES; opaque = NO; autoresize = LM; layer = <CALayer: 0x111573320>>",#"<UIButton: 0x111575aa0; frame = (234 20; 86 49); opaque = NO; autoresize = LM; layer = <CALayer: 0x1115724a0>>",#"<FixTitleColorButton: 0x1105d1700; baseClass = UIButton; frame = (20 18; 130 47); clipsToBounds = YES; opaque = NO; autoresize = RM; layer = <CALayer: 0x1105d19e0>>"]

这么绝的工具如果能在项目工程或者插件里面用就好了。


那么就来抽离一下吧

需要注意的地方

  • choose.m必须要改为choose.mm , 因为引入的是C++库

文件需要在MRC模式下运行,所以需要在Compile Sourceschoose.mmCompiler Flags设置为-fno-objc-arc


image.png

题外话: FLEX里面也有类似的功能 链接在这在这