近日,有需求需要hook NSDictionary的objectForKey方法,而使用theos直接hook该方法不能成功,而该类中的valueForKey方法却能hook成功,代码如下:
%hook NSDictionary
- (id)valueForKey:(NSString *)key{
id value = %orig(key);
NSLog(@“NSDictionary -------> valueForKey: %@”, key);
return value;
}
- (id)objectForKey:(id)aKey{
id value = %orig(aKey);
NSLog(@"__NSCFDictionary -------> objectForKey: %@", aKey);
return value;
}
%end
另外, 在ios 9 上,通过hook __NSCFDictionary类中的objectForKey方法可以达到上述需求,然而在ios 11上面该代码却不好使,无法成功。
我的问题是,如何能成功hook类NSDictionary中的objectForKey方法呢,而该方法与其他方法有什么区别导致无法hook成功呢?