(lldb) po [$r0 detailTextLabel]
<UITableViewLabel: 0x15fb5590; frame = (0 0; 0 0); text = ‘+86PhoneNumber’;
userInteractionEnabled = NO; layer = <_UILabelLayer: 0x15fd87e0>>
It’ s worth mentioning that the 1st argument of objc_msgSendSuper2 is not an Objective-C
object. I’m not sure whether it is a bug of LLDB or it is the actual case. Anyway, it doesn’t
influence our analysis, just ignore it for now. If you’re really interested in this detail, you are
welcome to share your research on http://bbs.iosre.com.
Back on track, the output of LLDB indicates that the return value of objc_msgSendSuper2 is
an initialized cell, which contains my number already. Similar to what happened in the last
section, let’s check out the implementation of tableView:cellForRowAtIndexPath: in
PhoneSettingsController’s superclass. First of all let’s figure out who’s the superclass in
PhoneSettingsController.h:
@interface PhoneSettingsController : PhoneSettingsListController
<TPSetPINViewControllerDelegate>
......
@end
PhoneSettingsController inherits from PhoneSettingsListController, so open
PhoneSettingsListController.h to check out if it implements
tableView:cellForRowAtIndexPath:.
@interface PhoneSettingsListController : PSListController
{
}
- (id)bundle;
- (void)dealloc;
- (id)init;
- (void)pushController:(Class)arg1 specifier:(id)arg2;
- (id)setCellEnabled:(BOOL)arg1 atIndex:(unsigned int)arg2;
- (id)setCellLoading:(BOOL)arg1 atIndex:(unsigned int)arg2;
- (id)setControlEnabled:(BOOL)arg1 atIndex:(unsigned int)arg2;
- (id)sheetSpecifierWithTitle:(id)arg1 controller:(Class)arg2 detail:(Class)arg3;
- (void)simRemoved:(id)arg1;
- (id)specifiers;
- (void)updateCellStates;
- (void)viewWillAppear:(BOOL)arg1;
@end
PhoneSettingsListController doesn’t implement tableView:cellForRowAtIndexPath:, so just
proceed to its superclass PSListController. The class PSListController is no longer inside
MobilePhoneSettings.bundle, so let’s search it in all class-dump headers, as shown in figure 6-31.