当IOS安装证书时,会进入Preferences.app弹出以上View。
我尝试根据书中160页的步骤,逆向出Install按钮的UI函数。
下面是我的过程以及遇到的问题。
当IOS安装证书时,会进入Preferences.app弹出以上View。
我尝试根据书中160页的步骤,逆向出Install按钮的UI函数。
下面是我的过程以及遇到的问题。
首先,
cy# [[UIApp keyWindow]recursiveDescription]
得到视图结构
@"<UIWindow: 0x15e12b20; frame = (0 0; 768 1024); autoresize = H; gestureRecognizers = <NSArray: 0x15d12120>; layer = <UIWindowLayer: 0x15e15c20>>
| <UILayoutContainerView: 0x15d62d10; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15d62e20>>
| | <UIView: 0x15d58e80; frame = (0 0; 768 64); layer = <CALayer: 0x15d45be0>>
| | <UILayoutContainerView: 0x15d62e80; frame = (301 0; 723 768); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x15d65bc0>; layer = <CALayer: 0x15d62f00>>
| | | <UINavigationTransitionView: 0x15d63610; frame = (0 0; 723 768); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15d63720>>
| | | | <UIViewControllerWrapperView: 0x17016910; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x170168b0>>
| | | | | <UIView: 0x17014ad0; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x17014b30>>
| | | | | | <UITableView: 0x162ed200; frame = (0 0; 723 768); autoresize = W+H; gestureRecognizers = <NSArray: 0x17014490>; layer = <CALayer: 0x170143f0>; contentOffset: {0, -64}>
| | | | | | | <UITableViewWrapperView: 0x17014790; frame = (0 0; 723 768); autoresize = W+H; layer = <CALayer: 0x17014800>>
| | | | | | | <UIImageView: 0x170169e0; frame = (0 700.5; 723 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x17016ba0>>
| | | | | | | <UITableViewHeaderFooterView: 0x15f10950; frame = (0 35; 723 30); text = 'No profiles are currently...'; autoresize = W; layer = <CALayer: 0x15f28ac0>>
| | | | | | | | <_UITableViewHeaderFooterViewBackground: 0x15e72000; frame = (0 0; 695 30); autoresize = W+H; layer = <CALayer: 0x15f18660>>
| | | | | | | | <_UITableViewHeaderFooterContentView: 0x15f262b0; frame = (0 0; 695 30); layer = <CALayer: 0x15e72e20>>
| | | | | | | | | <_UITableViewHeaderFooterViewLabel: 0x15ef2390; frame = (43 6.5; 212 17); text = 'No profiles are currently...'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef8d60>>
| | | | | | | <UIImageView: 0x17016130; frame = (719.5 555; 3.5 149); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x17016850>>
| | | <UINavigationBar: 0x15d62f30; frame = (0 20; 723 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15d633a0>; layer = <CALayer: 0x15d62ff0>>
| | | | <_UINavigationBarBackground: 0x15d63040; frame = (0 -20; 723 64); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15d63170>>
| | | | | <_UIBackdropView: 0x15e5d010; frame = (0 0; 723 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d679f0>>
| | | | | | <_UIBackdropEffectView: 0x15d683c0; frame = (0 0; 723 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15d685c0>>
| | | | | | <UIView: 0x15d68eb0; frame = (0 0; 723 64); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15d68a30>>
| | | | | <UIImageView: 0x15d631c0; frame = (0 64; 723 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15d63240>>
| | | | <UINavigationItemButtonView: 0x15e6dbd0; frame = (8 6; 79 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f2a640>>
| | | | | <UILabel: 0x15f1a590; frame = (19 5; 60 22); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f1a640>>
| | | | <UINavigationItemView: 0x17014c00; frame = (336.5 8; 50.5 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17014bc0>>
| | | | | <UILabel: 0x17014c80; frame = (0 3; 50.5 22); text = 'Profile'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17014d30>>
| | | | <_UINavigationBarBackIndicatorView: 0x15d63490; frame = (8 12; 12.5 20.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d635a0>>
| | <UILayoutContainerView: 0x15d34850; frame = (0 0; 300 768); clipsToBounds = YES; gestureRecognizers = <NSArray: 0x15e4aa60>; layer = <CALayer: 0x15e4c030>>
| | | <UINavigationTransitionView: 0x15e57180; frame = (0 0; 300 768); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15e58070>>
| | | | <UIViewControllerWrapperView: 0x15e82860; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15e82950>>
| | | | | <UIView: 0x15d6ce90; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15d6cf20>>
| | | | | | <UITableView: 0x16acea00; frame = (0 0; 300 768); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e13e10>; layer = <CALayer: 0x15e599b0>; contentOffset: {0, -64}>
| | | | | | | <UITableViewWrapperView: 0x15e5d6f0; frame = (0 0; 300 768); autoresize = W+H; layer = <CALayer: 0x15e54be0>>
| | | | | | | | <PSTableCell: 0x15e8f220; baseClass = UITableViewCell; frame = (0 756; 300 44); text = 'Reminders'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15e8f3e0>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e8f410; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8f680>; layer = <CALayer: 0x15e8f5e0>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e8f870; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8fa80>; layer = <CALayer: 0x15e8f8e0>>
| | | | | | | | | | | <UILabel: 0x15e8fad0; frame = (59 12; 83 21); text = 'Reminders'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8fb80>>
| | | | | | | | | | | <UIImageView: 0x15e8fff0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e90070>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e90320; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e904a0>>
| | | | | | | | <PSTableCell: 0x15e8dd80; baseClass = UITableViewCell; frame = (0 712; 300 44); text = 'Notes'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15e8df40>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e8df70; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8e1e0>; layer = <CALayer: 0x15e8e140>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e8e3d0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8e5e0>; layer = <CALayer: 0x15e8e440>>
| | | | | | | | | | | <UILabel: 0x15e8e630; frame = (59 12; 46 21); text = 'Notes'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8e6e0>>
| | | | | | | | | | | <UIImageView: 0x15e8ece0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8ed60>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e8f010; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8f190>>
| | | | | | | | <PSTableCell: 0x15e8d1a0; baseClass = UITableViewCell; frame = (0 668; 300 44); text = 'Mail, Contacts, Calendars'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8d360>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e8d390; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8d600>; layer = <CALayer: 0x15e8d560>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e8d7f0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8da00>; layer = <CALayer: 0x15e8d860>>
| | | | | | | | | | | <UILabel: 0x15e8da50; frame = (59 12; 199 21); text = 'Mail, Contacts, Calendars'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8db00>>
| | | | | | | | | | | <UIImageView: 0x15d82ba0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d82c20>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e8dbd0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8dcf0>>
| | | | | | | | <PSTableCell: 0x15e8be90; baseClass = UITableViewCell; frame = (0 624; 300 44); text = 'iCloud'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8c050>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e8c080; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8c2f0>; layer = <CALayer: 0x15e8c250>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e8c4e0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8c6f0>; layer = <CALayer: 0x15e8c550>>
| | | | | | | | | | | <UILabel: 0x15e8c740; frame = (59 12; 50 21); text = 'iCloud'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8c7f0>>
| | | | | | | | | | | <UIImageView: 0x15e8cc60; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8cce0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e8cf90; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8d110>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15ea33a0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15ea3410>>
| | | | | | | | <PSTableCell: 0x15e8ab80; baseClass = UITableViewCell; frame = (0 545; 300 44); text = 'Privacy'; autoresize = W; tag = 1; layer = <CALayer: 0x15e8ad40>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e8ad70; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e8afe0>; layer = <CALayer: 0x15e8af40>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e8b1d0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8b3e0>; layer = <CALayer: 0x15e8b240>>
| | | | | | | | | | | <UILabel: 0x15e8b430; frame = (59 12; 57 21); text = 'Privacy'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8b4e0>>
| | | | | | | | | | | <UIImageView: 0x15e8b950; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8b9d0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e8bc80; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15e8be00>>
| | | | | | | | <PSTableCell: 0x15e89870; baseClass = UITableViewCell; frame = (0 501; 300 44); text = 'Passcode'; autoresize = W; tag = 1; layer = <CALayer: 0x15e89a30>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e89a60; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e89cd0>; layer = <CALayer: 0x15e89c30>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e89ec0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e8a0d0>; layer = <CALayer: 0x15e89f30>>
| | | | | | | | | | | <UILabel: 0x15e8a120; frame = (59 12; 76 21); text = 'Passcode'; userInteractionEnabled = NO; layer = <CALayer: 0x15e8a1d0>>
| | | | | | | | | | | <UIImageView: 0x15e8a640; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e8a6c0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e8a970; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e8aaf0>>
| | | | | | | | <PSTableCell: 0x15e892a0; baseClass = UITableViewCell; frame = (0 457; 300 44); text = 'Sounds'; autoresize = W; tag = 1; layer = <CALayer: 0x15e50a40>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e89460; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e50af0>; layer = <CALayer: 0x15e50a70>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e82ee0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e838d0>; layer = <CALayer: 0x15e82f50>>
| | | | | | | | | | | <UILabel: 0x15e84360; frame = (59 12; 59 21); text = 'Sounds'; userInteractionEnabled = NO; layer = <CALayer: 0x15e83920>>
| | | | | | | | | | | <UIImageView: 0x15e88070; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e880f0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e896b0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e897a0>>
| | | | | | | | <PSTableCell: 0x15e88f10; baseClass = UITableViewCell; frame = (0 413; 300 44); text = 'Wallpapers & Brightness'; autoresize = W; tag = 1; layer = <CALayer: 0x15e7df00>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e890d0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e82ca0>; layer = <CALayer: 0x15e82c70>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e568b0; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15e55e80>; layer = <CALayer: 0x15e84b30>>
| | | | | | | | | | | <UILabel: 0x15e512b0; frame = (59 12; 188 21); text = 'Wallpapers & Brightness'; userInteractionEnabled = NO; layer = <CALayer: 0x15e51360>>
| | | | | | | | | | | <UIImageView: 0x15e4a620; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e14f10>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e82660; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e826d0>>
| | | | | | | | <PSTableCell: 0x15d7f8e0; baseClass = UITableViewCell; frame = (0 290; 300 44); text = 'Do Not Disturb'; autoresize = W; tag = 2; layer = <CALayer: 0x15d7faa0>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d7fad0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d7fd60>; layer = <CALayer: 0x15d7fca0>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15d7ff50; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d80160>; layer = <CALayer: 0x15d7ffc0>>
| | | | | | | | | | | <UILabel: 0x15d801b0; frame = (59 12; 115 21); text = 'Do Not Disturb'; userInteractionEnabled = NO; layer = <CALayer: 0x15d80260>>
| | | | | | | | | | | <UIImageView: 0x15d80730; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d807b0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d80a60; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15d80be0>>
| | | | | | | | <PSTableCell: 0x15d7e5d0; baseClass = UITableViewCell; frame = (0 246; 300 44); text = 'Control Center'; autoresize = W; tag = 1; layer = <CALayer: 0x15d7e790>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d7e7c0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d7ea30>; layer = <CALayer: 0x15d7e990>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15d7ec20; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d7ee30>; layer = <CALayer: 0x15d7ec90>>
| | | | | | | | | | | <UILabel: 0x15d7ee80; frame = (59 12; 113 21); text = 'Control Center'; userInteractionEnabled = NO; layer = <CALayer: 0x15d7ef30>>
| | | | | | | | | | | <UIImageView: 0x15d7f3a0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d7f420>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d7f6d0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d7f850>>
| | | | | | | | <PSTableCell: 0x15d7de50; baseClass = UITableViewCell; frame = (0 202; 300 44); text = 'Notification Center'; autoresize = W; tag = 2; layer = <CALayer: 0x15d42930>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d7e010; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d429e0>; layer = <CALayer: 0x15d42960>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15d69510; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d6d1a0>; layer = <CALayer: 0x15d39930>>
| | | | | | | | | | | <UILabel: 0x15d6d1e0; frame = (59 12; 144 21); text = 'Notification Center'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d290>>
| | | | | | | | | | | <UIImageView: 0x15d7d930; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d7d9b0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d7e3c0; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d7e550>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15dabcb0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15dabd20>>
| | | | | | | | <PSTableCell: 0x15d7dac0; baseClass = UITableViewCell; frame = (0 123; 300 44); text = 'Bluetooth'; autoresize = W; tag = 2; layer = <CALayer: 0x15d69380>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d7dc80; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d67ad0>; layer = <CALayer: 0x15d67aa0>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15d39470; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d72a90>; layer = <CALayer: 0x15d34a60>>
| | | | | | | | | | | <UILabel: 0x15d6de40; frame = (59 12; 75 21); text = 'Bluetooth'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6def0>>
| | | | | | | | | | | <UITableViewLabel: 0x15d7d440; frame = (262 12; 23 21); text = 'Off'; userInteractionEnabled = NO; layer = <CALayer: 0x15d7d4f0>>
| | | | | | | | | | | <UIImageView: 0x15e0de00; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e776d0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d42100; frame = (0 43.5; 300 0.5); layer = <CALayer: 0x15d42170>>
| | | | | | | | <PSTableCell: 0x15e88320; baseClass = UITableViewCell; frame = (0 79; 300 44); text = 'WLAN'; autoresize = W; tag = 2; layer = <CALayer: 0x15e88640>>
| | | | | | | | | <UITableViewCellScrollView: 0x15e88810; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e88b10>; layer = <CALayer: 0x15e88a70>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e88d00; frame = (0 0; 300 43.5); gestureRecognizers = <NSArray: 0x15d40e90>; layer = <CALayer: 0x15e5cfe0>>
| | | | | | | | | | | <UILabel: 0x15d6d030; frame = (59 12; 49 21); text = 'WLAN'; userInteractionEnabled = NO; layer = <CALayer: 0x15d62c50>>
| | | | | | | | | | | <UITableViewLabel: 0x15d6d530; frame = (210 12; 75 21); text = 'CU_vPH6'; userInteractionEnabled = NO; layer = <CALayer: 0x15d6cac0>>
| | | | | | | | | | | <UIImageView: 0x15e828d0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e5a670>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d6dd00; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15d5b800>>
| | | | | | | | <PSSwitchTableCell: 0x15d7d000; baseClass = UITableViewCell; frame = (0 35; 300 44); text = 'Airplane Mode'; autoresize = W; tag = 6; layer = <CALayer: 0x15e82db0>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d7d5a0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15e82e20>; layer = <CALayer: 0x15d7d840>; contentOffset: {0, 0}>
| | | | | | | | | | <UITableViewCellContentView: 0x15e83600; frame = (0 0; 234 43.5); gestureRecognizers = <NSArray: 0x15e83dc0>; layer = <CALayer: 0x15e83790>>
| | | | | | | | | | | <UILabel: 0x15e83ed0; frame = (59 12; 112 21); text = 'Airplane Mode'; userInteractionEnabled = NO; layer = <CALayer: 0x15e83f80>>
| | | | | | | | | | | <UIImageView: 0x15e86e10; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e86e90>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15e87f00; frame = (59 43.5; 241 0.5); layer = <CALayer: 0x15e88040>>
| | | | | | | | | | <UISwitch: 0x15e849f0; frame = (234 6; 51 31); layer = <CALayer: 0x15e84b80>>
| | | | | | | | | | | <_UISwitchInternalViewNeueStyle1: 0x15e84e50; frame = (0 0; 51 31); gestureRecognizers = <NSArray: 0x15e869c0>; layer = <CALayer: 0x15e84fc0>>
| | | | | | | | | | | | <UIView: 0x15e85340; frame = (15.5 0; 35.5 31); clipsToBounds = YES; layer = <CALayer: 0x15e853a0>>
| | | | | | | | | | | | | <UIView: 0x15e85190; frame = (-15.5 0; 51 31); layer = <CALayer: 0x15e851f0>>
| | | | | | | | | | | | <UIView: 0x15e852b0; frame = (0 0; 15.5 31); clipsToBounds = YES; layer = <CALayer: 0x15e85310>>
| | | | | | | | | | | | | <UIView: 0x15e85220; frame = (0 0; 51 31); layer = <CALayer: 0x15e85280>>
| | | | | | | | | | | | <UIView: 0x15e86620; frame = (0 0; 51 31); layer = <CALayer: 0x15e86680>>
| | | | | | | | | | | | | <UIImageView: 0x15e86370; frame = (39 16; 0 0); userInteractionEnabled = NO; layer = <CALayer: 0x15e86540>>
| | | | | | | | | | | | | <UIImageView: 0x15e86570; frame = (12 16; 0 0); alpha = 0; userInteractionEnabled = NO; layer = <CALayer: 0x15e865f0>>
| | | | | | | | | | | | <UIImageView: 0x15e85480; frame = (-13 -6; 57 43.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e861f0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15daa1b0; frame = (0 0; 300 0.5); layer = <CALayer: 0x15daa910>>
| | | | | | | | <PSBadgedTableCell: 0x15ea0a50; baseClass = UITableViewCell; frame = (0 369; 300 44); text = 'General'; autoresize = W; tag = 1; layer = <CALayer: 0x15ea0c20>>
| | | | | | | | | <UITableViewCellScrollView: 0x15ea0c50; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15ea0ee0>; layer = <CALayer: 0x15ea0e20>; contentOffset: {0, 0}>
| | | | | | | | | | <UIView: 0x15da6bb0; frame = (0 -0.5; 300 44.5); layer = <CALayer: 0x15da6c10>>
| | | | | | | | | | <UITableViewCellContentView: 0x15ea10d0; frame = (0 0; 300 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x15ea12e0>; layer = <CALayer: 0x15ea1140>>
| | | | | | | | | | | <UILabel: 0x15ea1330; frame = (59 12; 60 21); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ea13e0>>
| | | | | | | | | | | <UIImageView: 0x15da5760; frame = (260 11; 30 21); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da57e0>>
| | | | | | | | | | | <UILabel: 0x15da4e50; frame = (260 10; 30 21); text = '1'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da5810>>
| | | | | | | | | | | <UIImageView: 0x15da6ac0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15da64e0>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15da70d0; frame = (59 43.5; 241 0.5); hidden = YES; layer = <CALayer: 0x15da7140>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15ea4190; frame = (0 0; 300 0.5); hidden = YES; layer = <CALayer: 0x15ea4200>>
| | | | | | | | <PSBadgedTableCell: 0x15d80cc0; baseClass = UITableViewCell; frame = (0 369; 300 44); text = 'General'; hidden = YES; autoresize = W; tag = 1; layer = <CALayer: 0x15d80fe0>>
| | | | | | | | | <UITableViewCellScrollView: 0x15d811b0; frame = (0 0; 300 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x15d81400>; layer = <CALayer: 0x15d81380>; contentOffset: {0, 0}>
| | | | | | | | | | <UIView: 0x15d81e60; frame = (0 -0.5; 300 44.5); layer = <CALayer: 0x15d81ec0>>
| | | | | | | | | | <UITableViewCellContentView: 0x15d815f0; frame = (0 0; 300 43.5); opaque = NO; gestureRecognizers = <NSArray: 0x15d81800>; layer = <CALayer: 0x15d81660>>
| | | | | | | | | | | <UILabel: 0x15d81850; frame = (59 12; 60 21); text = 'General'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d81900>>
| | | | | | | | | | | <UIImageView: 0x15d81db0; frame = (15 7; 29 29); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d81e30>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15d82100; frame = (59 43.5; 241 0.5); hidden = YES; layer = <CALayer: 0x15d82260>>
| | | | | | | | | | <_UITableViewCellSeparatorView: 0x15ea46e0; frame = (0 0; 300 0.5); hidden = YES; layer = <CALayer: 0x15ea4750>>
| | | | | | | <UIImageView: 0x15d991e0; frame = (0 764.5; 300 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x15d99610>>
| | | | | | | <UIImageView: 0x15d998c0; frame = (294.5 2; 3.5 293); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x15d99990>>
| | | <UINavigationBar: 0x15e50b60; frame = (0 20; 300 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15e54c20>; layer = <CALayer: 0x15e50d80>>
| | | | <_UINavigationBarBackground: 0x15e51210; frame = (0 -20; 300 64); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15e513b0>>
| | | | | <_UIBackdropView: 0x15d6a6e0; frame = (0 0; 300 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d6a940>>
| | | | | | <_UIBackdropEffectView: 0x15e5e090; frame = (0 0; 300 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15e5e190>>
| | | | | | <UIView: 0x15e5e1c0; frame = (0 0; 300 64); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15e5e220>>
| | | | | <UIImageView: 0x15d3e2a0; frame = (0 64; 300 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15d3edc0>>
| | | | <UINavigationItemView: 0x15d6cfb0; frame = (117.5 8; 65 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d100>>
| | | | | <UILabel: 0x15d6d480; frame = (0 3; 65 22); text = 'Settings'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d6d600>>
| | | | <_UINavigationBarBackIndicatorView: 0x15e56a30; frame = (8 12; 12.5 20.5); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15e56b30>>
| <UIDimmingView: 0x15dfbef0; frame = (0 0; 768 1024); opaque = NO; autoresize = W+H; layer = <CALayer: 0x15dfbf70>>
| <UIDropShadowView: 0x15dfbd10; frame = (84 242; 620 540); transform = [0, -1, 1, 0, 0, 0]; autoresize = LM+RM+TM+BM; layer = <CALayer: 0x15d93140>>
| | <UILayoutContainerView: 0x15f2cbb0; frame = (0 0; 540 620); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x15d92f50>; layer = <CALayer: 0x15f16830>>
| | | <UINavigationTransitionView: 0x15d61e30; frame = (0 0; 540 620); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x15d917c0>>
| | | | <UIViewControllerWrapperView: 0x1700d170; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x1700d060>>
| | | | | <UIView: 0x15d012e0; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x15d01340>>
| | | | | | <UITableView: 0x16371000; frame = (0 0; 540 620); autoresize = W+H; gestureRecognizers = <NSArray: 0x15db9a10>; layer = <CALayer: 0x15d025c0>; contentOffset: {0, -44}>
| | | | | | | <UITableViewWrapperView: 0x15d02920; frame = (0 0; 540 620); autoresize = W+H; layer = <CALayer: 0x15d02990>>
| | | | | | | | <UITableViewCell: 0x1700c310; frame = (0 288; 540 44); text = 'More Details'; autoresize = W; tag = 1; layer = <CALayer: 0x1700c4a0>>
| | | | | | | | | <UITableViewCellScrollView: 0x1700c4d0; frame = (28 0; 484 44); autoresize = W+H; gestureRecognizers = <NSArray: 0x1700be90>; layer = <CALayer: 0x1700c6a0>; contentOffset: {0, 0}>
| | | | | | | | | | <UIGroupTableViewCellBackground: 0x15f31550; frame = (0 0; 484 44); autoresize = W; layer = <CALayer: 0x15f31470>>
| | | | | | | | | | <UITableViewCellContentView: 0x1700c8e0; frame = (0 0; 451 43); gestureRecognizers = <NSArray: 0x1700caf0>; layer = <CALayer: 0x1700c950>>
| | | | | | | | | | | <UILabel: 0x1700cb40; frame = (15 0; 434 43); text = 'More Details'; userInteractionEnabled = NO; layer = <CALayer: 0x1700cbf0>>
| | | | | | | | | | <UIButton: 0x1700cd80; frame = (461 15; 8 12.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700ce70>>
| | | | | | | | | | | <UIImageView: 0x1700cf20; frame = (0 0; 8 12.5); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700cfa0>>
| | | | | | | | <MCDetailsDescriptionTableCell: 0x1700b0e0; baseClass = UITableViewCell; frame = (0 137; 540 151); autoresize = W; layer = <CALayer: 0x1700b270>>
| | | | | | | | | <UITableViewCellScrollView: 0x1700b420; frame = (28 0; 484 151); autoresize = W+H; gestureRecognizers = <NSArray: 0x1700b350>; layer = <CALayer: 0x1700b2a0>; contentOffset: {0, 0}>
| | | | | | | | | | <UIGroupTableViewCellBackground: 0x15f14f00; frame = (0 0; 484 151); autoresize = W; layer = <CALayer: 0x15f15740>>
| | | | | | | | | | | <UIView: 0x15f31220; frame = (1 150.5; 482 0.5); hidden = YES; autoresize = W+TM; layer = <CALayer: 0x15f311d0>>
| | | | | | | | | | <UITableViewCellContentView: 0x1700b7b0; frame = (0 0; 484 150); gestureRecognizers = <NSArray: 0x1700ba50>; layer = <CALayer: 0x1700b820>>
| | | | | | | | | | | <MCDetailsDescriptionView: 0x1700baa0; frame = (0 0; 320 151); opaque = NO; layer = <CALayer: 0x1700bb20>>
| | | | | | | | <MCDetailsHeaderCell: 0x17009120; baseClass = UITableViewCell; frame = (0 35; 540 102); autoresize = W; layer = <CALayer: 0x170090b0>>
| | | | | | | | | <UITableViewCellScrollView: 0x170092b0; frame = (28 0; 484 102); autoresize = W+H; gestureRecognizers = <NSArray: 0x17009540>; layer = <CALayer: 0x17009480>; contentOffset: {0, 0}>
| | | | | | | | | | <UIGroupTableViewCellBackground: 0x1700d550; frame = (0 0; 484 102); autoresize = W; layer = <CALayer: 0x1700d4e0>>
| | | | | | | | | | | <UIView: 0x1700d8b0; frame = (1 101.5; 482 0.5); hidden = YES; autoresize = W+TM; layer = <CALayer: 0x1700d820>>
| | | | | | | | | | <UITableViewCellContentView: 0x17009730; frame = (0 0; 484 101); gestureRecognizers = <NSArray: 0x17009940>; layer = <CALayer: 0x170097a0>>
| | | | | | | | | | | <UIImageView: 0x1700a940; frame = (15 14; 78 78); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17009a30>>
| | | | | | | | | | | <MCDetailsHeaderContentView: 0x17009a60; frame = (105 14; 367 78); opaque = NO; autoresizesSubviews = NO; layer = <CALayer: 0x17009af0>>
| | | | | | | | | | | | <MCActionButton: 0x15f29b00; baseClass = UIButton; frame = (293 53; 74 25); opaque = NO; layer = <CALayer: 0x15f2ca30>>
| | | | | | | | | | | | | <UIImageView: 0x15f17340; frame = (0 0; 74 25); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f173c0>>
| | | | | | | | | | | | | <UIButtonLabel: 0x15f2ed60; frame = (17 4; 40 17); text = 'Install'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef3cf0>>
| | | | | | | | | | | | <UILabel: 0x15f17660; frame = (0 0; 367 22); text = 'Verify Settings'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f17710>>
| | | | | | | | | | | | <UILabel: 0x15f30b30; frame = (0 22; 367 17); text = 'freemyapps.com'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f30be0>>
| | | | | | | | | | | | <UIImageView: 0x1700aec0; frame = (0 58; 13 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1700adf0>>
| | | | | | | | | | | | <MCUIGradientLabel: 0x17009b90; frame = (16 56; 52.05 17.895); text = 'Verified'; opaque = NO; layer = <CALayer: 0x1700abc0>>
| | | | | | | <UIImageView: 0x170137d0; frame = (0 616.5; 540 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x17013850>>
| | | | | | | <UIImageView: 0x170139b0; frame = (536.5 250; 3.5 370); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x17013a80>>
| | | <UINavigationBar: 0x15f2ebe0; frame = (0 0; 540 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x15d8b9d0>; layer = <CALayer: 0x15d92c50>>
| | | | <_UINavigationBarBackground: 0x15de7b80; frame = (0 0; 540 44); opaque = NO; autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x15d92bf0>>
| | | | | <_UIBackdropView: 0x15d974e0; frame = (0 0; 540 44); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x15d97730>>
| | | | | | <_UIBackdropEffectView: 0x15d068d0; frame = (0 0; 540 44); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x15d06940>>
| | | | | | <UIView: 0x15d06970; frame = (0 0; 540 44); hidden = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x15d069d0>>
| | | | | <UIImageView: 0x15f2eca0; frame = (0 44; 540 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x15f143c0>>
| | | | <UINavigationButton: 0x15fc2210; frame = (16 8; 54 30); opaque = NO; layer = <CALayer: 0x15ebc160>>
| | | | | <UIButtonLabel: 0x15fc1670; frame = (0 4; 54 21); text = 'Cancel'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15fc2340>>
| | | | <UINavigationItemView: 0x15d01410; frame = (219 8; 102 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d013d0>>
| | | | | <UILabel: 0x15d01490; frame = (0 3; 102 22); text = 'Install Profile'; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15d01540>>
| | | | <_UINavigationBarBackIndicatorView: 0x15dc30d0; frame = (8 12; 12.5 20.5); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15dc3ed0>>"
cy#
在其中搜索“Install”,找到
| | | | | | | | | | | | <MCActionButton: 0x15f29b00; baseClass = UIButton; frame = (293 53; 74 25); opaque = NO; layer = <CALayer: 0x15f2ca30>>
| | | | | | | | | | | | | <UIImageView: 0x15f17340; frame = (0 0; 74 25); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15f173c0>>
| | | | | | | | | | | | | <UIButtonLabel: 0x15f2ed60; frame = (17 4; 40 17); text = 'Install'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x15ef3cf0>>
先定位到
UIButtonLabel: 0x15f2ed60
用
cy# [#0x15f2ed60 setHidden:YES]
cy# [#0x15f2ed60 setHidden:NO]
验证,确定要找的UIButton,
MCActionButton: 0x15f29b00
cy# [#0x15f29b00 allTargets]
[NSSet setWithArray:@[#"<MCDetailsHeaderContentView: 0x17009a60; frame = (105 14; 367 78); opaque = NO; autoresizesSubviews = NO; layer = <CALayer: 0x17009af0>>"]]]
cy# [#0x15f29b00 allControlEvent]
Error: unrecognized selector allControlEvent sent to object 0x15f29b00
cy# [#0x15f29b00 allControlEvents]
64
cy# [#0x15f29b00 actionsForTarget:#0x17009a60 forControlEvent:64]
@["_actionButtonPressed:"]
cy#
可是我在dump出的头文件里都找不到
[MCDetailsHeaderContentView _actionButtonPressed:]
中的MCDetailsHeaderContentView,也没法像书中一样去找他的父类啊。思路断了。
最难的地方都走过来了,怎么卡在了最简单的地方呢?你是怎么找的,我怎么一找就找到了:
我用
0987dembp:Preferences.app d0987$ class-dump -S -s -H Preferences -o ./../headers/Preferences
dump出来只有137项,没有MCDetailsHeaderContentView.h文件啊!
为何会这样呢?
在MobilePhoneSettings.bundle里是吧。
书上写了怎么定位头文件的啊
我用书上的方法,
grep
grep -r MCDetailsHeaderContentView /System/Library
Binary file /System/Library/AccessibilityBundles/ManagedConfigurationUI.axbundle/ManagedConfigurationUI matches
只出来个这个东西,dump出来没有相应头文件。
后来又出来了几个
Ts-iPhone:~ root# grep -r MCDetailsHeaderContentView /System/Library
Binary file /System/Library/AccessibilityBundles/ManagedConfigurationUI.axbundle/ManagedConfigurationUI matches
Binary file /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64 matches
Binary file /System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7s matches
grep: /System/Library/Caches/com.apple.dyld/enable-dylibs-to-override-cache: No such file or directory
我也想到了下面的文件夹
/System/Library/PreferenceBundles/ManagedConfigurationUI.bundle
里面没找到可执行文件啊。
没找到可执行文件的情况书上已经讲到过了,再仔细看看
找到了,根据第二版72页内容。
在
/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armv7s
中提取出ManagedConfigurationUI.bundle
dump出头文件。
再从ManagedConfigurationUI.bundle
里提取而执行文件。IDA打开,找到
[MCDetailsHeaderContentView _actionButtonPressed:]
函数
_text:30622158 PUSH {R4-R7,LR}
__text:3062215A ADD R7, SP, #0xC
__text:3062215C STR.W R8, [SP,#0xC+var_10]!
__text:30622160 MOV R5, R0
__text:30622162 MOV R0, R2
__text:30622164 BLX _objc_retain
__text:30622168 MOV R8, R0
__text:3062216A MOV R0, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._headerDelegate - 0x30622176) ; id _headerDelegate;
__text:30622172 ADD R0, PC ; id _headerDelegate;
__text:30622174 LDR R4, [R0] ; id _headerDelegate;
__text:30622176 LDR R0, [R5,R4]
__text:30622178 CMP R0, #0
__text:3062217A BEQ loc_30622210
__text:3062217C MOV R1, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._headerMode - 0x30622188) ; int _headerMode;
__text:30622184 ADD R1, PC ; int _headerMode;
__text:30622186 LDR R1, [R1] ; int _headerMode;
__text:30622188 LDR R1, [R5,R1]
__text:3062218A CMP R1, #4
__text:3062218C BNE loc_306221BE
__text:3062218E MOV R1, #(selRef_respondsToSelector_ - 0x306221A2)
__text:30622196 MOV R2, #(selRef_actionButtonPressed_ - 0x306221A4)
__text:3062219E ADD R1, PC ; selRef_respondsToSelector_
__text:306221A0 ADD R2, PC ; selRef_actionButtonPressed_
__text:306221A2 LDR R1, [R1] ; "respondsToSelector:"
__text:306221A4 LDR R6, [R2] ; "actionButtonPressed:"
__text:306221A6 MOV R2, R6
__text:306221A8 BLX _objc_msgSend
__text:306221AC TST.W R0, #0xFF
__text:306221B0 BEQ loc_30622210
__text:306221B2 LDR R0, [R5,R4]
__text:306221B4 MOV R1, R6
__text:306221B6 MOV R2, R5
__text:306221B8 BLX _objc_msgSend
__text:306221BC B loc_30622210
__text:306221BE ; ---------------------------------------------------------------------------
__text:306221BE
__text:306221BE loc_306221BE ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+34j
__text:306221BE MOV R1, #(_OBJC_IVAR_$_MCDetailsHeaderContentView._isNewPayload - 0x306221CA) ; char _isNewPayload;
__text:306221C6 ADD R1, PC ; char _isNewPayload;
__text:306221C8 LDR R1, [R1] ; char _isNewPayload;
__text:306221CA LDRB R1, [R5,R1]
__text:306221CC CBZ R1, loc_306221E4
__text:306221CE MOV R1, #(selRef_respondsToSelector_ - 0x306221E2)
__text:306221D6 MOV R2, #(selRef_installPayload - 0x306221E4)
__text:306221DE ADD R1, PC ; selRef_respondsToSelector_
__text:306221E0 ADD R2, PC ; selRef_installPayload
__text:306221E2 B loc_306221F8
__text:306221E4 ; ---------------------------------------------------------------------------
__text:306221E4
__text:306221E4 loc_306221E4 ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+74j
__text:306221E4 MOV R1, #(selRef_respondsToSelector_ - 0x306221F8)
__text:306221EC MOV R2, #(selRef_removePayload - 0x306221FA)
__text:306221F4 ADD R1, PC ; selRef_respondsToSelector_
__text:306221F6 ADD R2, PC ; selRef_removePayload
__text:306221F8
__text:306221F8 loc_306221F8 ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+8Aj
__text:306221F8 LDR R6, [R2]
__text:306221FA LDR R1, [R1]
__text:306221FC MOV R2, R6
__text:306221FE BLX _objc_msgSend
__text:30622202 TST.W R0, #0xFF
__text:30622206 BEQ loc_30622210
__text:30622208 LDR R0, [R5,R4]
__text:3062220A MOV R1, R6
__text:3062220C BLX _objc_msgSend
__text:30622210
__text:30622210 loc_30622210 ; CODE XREF: -[MCDetailsHeaderContentView _actionButtonPressed:]+22j
__text:30622210 ; -[MCDetailsHeaderContentView _actionButtonPressed:]+58j ...
__text:30622210 MOV R0, R8
__text:30622212 LDR.W R8, [SP+0x10+var_10],#4
__text:30622216 POP.W {R4-R7,LR}
__text:3062221A B.W j__objc_release
__text:3062221A ; End of function -[MCDetailsHeaderContentView _actionButtonPressed:]
__text:3062221A
__text:3062221A ; ---------------------------------------------------------------------------
之后再使用LLDB
image list -o -f
[235] 0x02391000 /System/Library/PreferenceBundles/ManagedConfigurationUI.bundle/ManagedConfigurationUI(0x00000000329a7000)
我在函数入口下断点应该是
0x02391000 + 0x30622158 = 0x329b3158
效果如下:
(lldb) br s -a 0x329b3158
Breakpoint 2: where = ManagedConfigurationUI`<redacted>, address = 0x329b3158
(lldb) c
Process 396 resuming
Process 396 stopped
* thread #1: tid = 0x0766, 0x329b3158 ManagedConfigurationUI`<redacted>, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
frame #0: 0x329b3158 ManagedConfigurationUI`<redacted>
ManagedConfigurationUI`<redacted>:
-> 0x329b3158: push {r4, r5, r6, r7, lr}
0x329b315a: add r7, sp, #0xc
0x329b315c: str r8, [sp, #-4]!
0x329b3160: mov r5, r0
为何断点处无法像书上的例子一样显示出相对应的函数名字呢?
书上也是有的显示了有的没显示,你的LLDB输出看上去是正常的
什么书上?求分享
你真不知道什么书?
葵花宝典
知道了