音讯转发引进
instrumentObjcMessageSends办法的运用
在上一篇文章中咱们介绍了通过办法挑选的办法来处理未结束的办法溃散问题;但明显这种一ios体系刀切的办法并不可appreciate取;那么ios14.4.1更新了什么除此之外,咱们还有其他办法来处理么?
咱们剖析通过sel
寻觅imp
的进程发现,毕竟还调用了log_and_fill_cache
办法:
里边的logMessageSend
办法会记载办法调用的日志流程,implementer
是Class
能够确认是存在的,那么只需求obappearancejcMsgLogEnabled
的值为YES
,那么就能够记载办法调用的日志信息了:
日志信息存储途径为/tmp/msgSends-%d
,那么假设给objcMsgLogEnable架构师工资一月多少d
赋值为true
呢?在源码中查找objcMsgLogEnabled
:
发apple id暗码重置现在办法instrumentObjcMessageSappetiteends
中会给objcMsgLogEnabled
赋值,那么通过调用此办法,就能够输入方apple store法调用的日志信息了。
咱们先来看一下app store没有结束的talk
办法,在实施进程中的日志输出:
工程有必要是个mac工程开源是什么意思,比如
Command Lios下载ine Tool
工程
作业之后,毕竟生成日志架构师文件:
咱们翻开日志文件,日志如下:
刚才咱们打印的是政策办法的调用,接下来咱们看一下类办法的调用:
生成文件如下:
能够看出类办法
比政策办法
多调用了resolveClassMethod
,我开源软件们首要研ios15讨红框内的几个方ios14.4.1更新了什么法即ios8备忘录可,其他的都是objc
的底层调用的输出内容;resolveInstanceMethod
和resolveClassMethod
办法在之前的文章中咱们现已介绍appear过了,也知道了其调用两次的原因,那么forwardingTargetForSelec开源是什么意思tor
,methodSignatureForSelector
和doesNotRecappearognizeSelector
是什么呢?这便是咱们接app id注册下来要了解的音讯转发
流程
音讯转发
快速转发 forwardingTargetForSelector
接下来,咱们以政策方apple id暗码重置法
的调用来剖析音讯转发
的流程;在之前的文件中咱们看到了app id注册了forwardingTarg开源众包etFo架构设计rSelecto开源节流r
办法的调用,那么这个办法是做什么的呢?
Returns the object to w架构图模板hich unrecognized messages should first be directed.
大意是回来这个音讯(unrecognized messages)应该首要指向的政策,也便是咱们需求将这个无法辨认的音讯重定向
给另一个政策,然后看这个政策能否调用;咱们现在Teacher
类中增加forwardingTargetForSelector
的默许结束:
能够看到,尽管依然没有解决溃散问题,但是forwardingTargetForSe架构师工资一月多少lector
办法被成功调用,那么接下来在forwardingTargetForSelector
中把办法重定向给其他政策呢?
新建apple tv一个Student
类,在Studapple watchent
中结束talk
办法,留意并不承继Person
:
@i开源nterface Student :ios15描绘文件 NSObject
@end
@implemenappearancetation Student
- (void)talk {
NSLog(@"%s", __func__);
}
@end
然后在forwardingTargetForSelector
中,将其重定向给Student
类的政策:
能够看到调用成果:Stuappreciatedent
类中的办法talk
被调用,并且Student
与Person开源阅览
和Teacher
并无任何承继上的联络;
这是一个快速转发
的流程;
慢速转发 meios8备忘录thodSignatureForSelector
那么假app id注册如Student
也没有结束talk
办法成果会怎么呢?依据咱们在日志文件中打印的办法实施流程能够知道,假设studenios下载t
也ios8备忘录没有结束talk
,那么必然会继续报错,实施me开源节流thodSignatureForSelector
办法,那么这个办法是什么意思呢?
Returns an NSMethodSignature object that coappstorentains a description of the method开源 identiapple storefied by a given selector.
Relappstoreated Documentation
- forwaiOSrdInvocation:
Overriddenapple store by subclasses to forward messages to other objects.
这个办法将会回来一个NSMethodSiappearancegnature
政策,其包含了被调用架构师工资一月多少的办法的描绘信息,也便是签名;并且,他需求与forwardInvocation:
办法一同运用:
能够看到现已被methodSignatureForSelector
阻挠到,接下来补全forwardInvocation:
办法的结束,forwardInvocation:
用来解读签名,与methodSignatureForSelector
一同运用:
v@:
解读:
-
v
标明void
类型,标明talk
的回来值 -
@
标明调用者类型self
,即id
类型 -
:
标明SEL
从头到尾talk
没有被结束,假设需求处理能够apple pay在forwardInvocation
办法中获取到进行处理,不然将会办法将会流失掉;
hopper反汇编
接下来咱们运用开源代码网站githubhopper
东西来通过反汇编来剖析音讯转发ios下载
;
作业原本的代码,在项目溃散时,运用bt
指令来查看仓库信息:
在仓库中清楚看到之前ios体系调用日志中的办法doesNotRecognizeSelector
,能够确认doesNotRecognizeSelector
在Coios15正式版本什么时候发布reFoundation
框架中,并且是___fapple官网oios体系rwarding___
和_CF_forwarding_prep_0
触发的,那么咱们测验在CoreFoundation
的源码中剖析
Coapple id暗码重置reFoundation源码下载
但是,不管是forwarding
仍是forwarding_prep_0
,在源码中都没有找到任何蛛丝马迹,看来源码剖析无法走通,Apple
并未开源这部分代码;
那么咱们能够直接去看CoreFoundation
的可实施文件进行反汇编剖析:
CoreFoundation
无缺途径如下:
/Applications/Xcode.app/Contios模拟器ents/Developeapp是什么意思r/Platfo开源是什么意思rms/iPhoneOS.platform/Library/Developer/CoreSimulator/ios最好玩的手游Profiles/Runtimes/iOS.simruntime/Contents/Resourcesapple id/RuntimeRoot/Sy架构师工资一月多少stem/Library/Fappointmentrameworks/CoreFoundation.framework/CoreFios模拟器oundation
接下来运用hopper
来进行反汇编剖析,将可实施文件运用架构师工资一月多少hopper
翻开,挑选x86(64 bits)
架构:Apple
从仓库信息中咱们能够清楚是forwarding_prep_0
触发了forwarding
,那么咱们以forwarding_prep_0
为切入口appstore
进行剖析:
咱们以伪代码
的办法来剖析其流程,无缺流程如下:
针对汇编剖析,流程如下