LinkMap篇 (一)

作者: 纵横而乐 | 来源:发表于2017-08-26 16:42 被阅读56次

    linkmap中存放的是app可执行文件Mach-O格式组织的各类数据的清单,根据LinkMap展开对Mach-O文件及dyld加载Mach-O可执行文件的细节

    Mach-O文件解析

    这部分着重对Mach-O分析工具及分析进行注解

    Mach-O文件分析工具:

    • XCode自带的/usr/bin/pagestuff , lipo , file , otool , nm

    • jtool
      命令行中用man命令可以分别查询到上述各工具的作用,比如可以按逻辑页数查看Mach-O文件(比如app名字为name)内容的pagestuff命令

      pagestuff name.app/name {pagenum} //如果pagenum为0,输出一般是:File Page 0 contains Mach-O headers
      pagestuff name.app/name -a //会把所有页中内容信息全部输出
      

    由一个Demo工程展开对Mach-O文件的分析

    Xcode 8.3创建一个Single View Application, 不修改AppDelegate及ViewController类,新增SampleObject类并修改main.m
    代码如下:

    //ViewController.m
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    //SampleObject.h
    #import <Foundation/Foundation.h>
    
    @interface SampleObject : NSObject
    
    @property (nonatomic,strong) NSObject* propertyObj;
    
    - (void)getSomeResultWithString:(NSString*)inputString number:(NSNumber*)number;
    
    @end
    
    //SampleObject.mm
     #import "SampleObject.h"
    #import <stdio.h>
    
    const NSString* cntstr = @"SampleObjectKey";
    
    @interface SampleObject()
    
    @property (nonatomic,strong) NSString* sampleName;
    @property (nonatomic,assign) NSUInteger sampleId;
    
    @end
    
    @implementation SampleObject
    
    - (void)getSomeResultWithString:(NSString*)inputString number:(NSNumber*)number
    {
        NSString* currentStr = [NSString stringWithFormat:@"%@:%@",inputString,number];
        NSUInteger stackNum = 123;
        __block NSString* blockString = nil;
        dispatch_async(dispatch_get_main_queue(), ^{
           NSString* compositedString = [NSString stringWithFormat:@"%@:%@:%lul",cntstr,currentStr,stackNum];
            NSLog(@"composite string:%@,succeeded",compositedString);
            puts(compositedString.UTF8String);
            blockString = compositedString;
        });
    }
    //main.m
    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    #import "SampleObject.h"
    
    int main(int argc, char * argv[]) {
        @autoreleasepool {
            SampleObject* obj = [SampleObject new];
            obj.propertyObj = [NSObject new];
            [obj getSomeResultWithString:@"ab" number:@2];
            return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
        }
    }
    @end
    

    Mach-O文件格式
    所得LinkMap文件输出如下:

    # Path: /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Products/Debug-iphonesimulator/SampleApp.app/SampleApp
    # Arch: x86_64
    # Object files:
    [  0] linker synthesized
    [  1] /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Intermediates/SampleApp.build/Debug-iphonesimulator/SampleApp.build/SampleApp.app.xcent
    [  2] /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Intermediates/SampleApp.build/Debug-iphonesimulator/SampleApp.build/Objects-normal/x86_64/ViewController.o
    [  3] /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Intermediates/SampleApp.build/Debug-iphonesimulator/SampleApp.build/Objects-normal/x86_64/AppDelegate.o
    [  4] /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Intermediates/SampleApp.build/Debug-iphonesimulator/SampleApp.build/Objects-normal/x86_64/SampleObject.o
    [  5] /Users/fangyang/Library/Developer/Xcode/DerivedData/SampleApp-diymabslfgbdgvfhsqdnmmqngnqx/Build/Intermediates/SampleApp.build/Debug-iphonesimulator/SampleApp.build/Objects-normal/x86_64/main.o
    [  6] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/Frameworks//Foundation.framework/Foundation
    [  7] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/usr/lib/libobjc.dylib
    [  8] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/usr/lib/libSystem.dylib
    [  9] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.3.sdk/System/Library/Frameworks//UIKit.framework/UIKit
    # Sections:
    # Address   Size        Segment Section
    0x100000D80 0x00000A59  __TEXT  __text
    0x1000017DA 0x0000006C  __TEXT  __stubs
    0x100001848 0x000000C4  __TEXT  __stub_helper
    0x10000190C 0x00000AD2  __TEXT  __objc_methname
    0x1000023DE 0x0000004B  __TEXT  __objc_classname
    0x100002429 0x0000084F  __TEXT  __objc_methtype
    0x100002C78 0x0000012F  __TEXT  __cstring
    0x100002DA8 0x00000074  __TEXT  __gcc_except_tab
    0x100002E1C 0x0000016A  __TEXT  __entitlements
    0x100002F88 0x00000074  __TEXT  __unwind_info
    0x100003000 0x00000010  __DATA  __nl_symbol_ptr
    0x100003010 0x00000020  __DATA  __got
    0x100003030 0x00000090  __DATA  __la_symbol_ptr
    0x1000030C0 0x00000030  __DATA  __const
    0x1000030F0 0x000000A0  __DATA  __cfstring
    0x100003190 0x00000018  __DATA  __objc_classlist
    0x1000031A8 0x00000010  __DATA  __objc_protolist
    0x1000031B8 0x00000008  __DATA  __objc_imageinfo
    0x1000031C0 0x00000DD8  __DATA  __objc_const
    0x100003F98 0x00000048  __DATA  __objc_selrefs
    0x100003FE0 0x00000028  __DATA  __objc_classrefs
    0x100004008 0x00000008  __DATA  __objc_superrefs
    0x100004010 0x00000020  __DATA  __objc_ivar
    0x100004030 0x000000F0  __DATA  __objc_data
    0x100004120 0x000000C8  __DATA  __data
    # Symbols:
    # Address   Size        File  Name
    0x100000D80 0x00000040  [  2] -[ViewController viewDidLoad]
    0x100000DC0 0x0000003C  [  2] -[ViewController didReceiveMemoryWarning]
    0x100000E00 0x00000080  [  3] -[AppDelegate application:didFinishLaunchingWithOptions:]
    0x100000E80 0x00000040  [  3] -[AppDelegate applicationWillResignActive:]
    0x100000EC0 0x00000040  [  3] -[AppDelegate applicationDidEnterBackground:]
    0x100000F00 0x00000040  [  3] -[AppDelegate applicationWillEnterForeground:]
    0x100000F40 0x00000040  [  3] -[AppDelegate applicationDidBecomeActive:]
    0x100000F80 0x00000040  [  3] -[AppDelegate applicationWillTerminate:]
    0x100000FC0 0x00000020  [  3] -[AppDelegate window]
    0x100000FE0 0x00000040  [  3] -[AppDelegate setWindow:]
    0x100001020 0x00000033  [  3] -[AppDelegate .cxx_destruct]
    0x100001060 0x00000250  [  4] -[SampleObject getSomeResultWithString:number:]
    0x1000012B0 0x00000060  [  4] ___Block_byref_object_copy_
    0x100001310 0x00000030  [  4] ___Block_byref_object_dispose_
    0x100001340 0x00000120  [  4] ___47-[SampleObject getSomeResultWithString:number:]_block_invoke
    0x100001460 0x00000070  [  4] ___copy_helper_block_
    0x1000014D0 0x00000040  [  4] ___destroy_helper_block_
    0x100001510 0x00000020  [  4] -[SampleObject propertyObj]
    0x100001530 0x00000040  [  4] -[SampleObject setPropertyObj:]
    0x100001570 0x00000020  [  4] -[SampleObject sampleName]
    0x100001590 0x00000040  [  4] -[SampleObject setSampleName:]
    0x1000015D0 0x00000020  [  4] -[SampleObject sampleId]
    0x1000015F0 0x00000030  [  4] -[SampleObject setSampleId:]
    0x100001620 0x00000054  [  4] -[SampleObject .cxx_destruct]
    0x100001680 0x00000159  [  5] _main
    0x1000017DA 0x00000006  [  6] _NSLog
    0x1000017E0 0x00000006  [  6] _NSStringFromClass
    0x1000017E6 0x00000006  [  9] _UIApplicationMain
    0x1000017EC 0x00000006  [  8] __Block_object_assign
    0x1000017F2 0x00000006  [  8] __Block_object_dispose
    0x1000017F8 0x00000006  [  8] __Unwind_Resume
    0x1000017FE 0x00000006  [  8] _dispatch_async
    0x100001804 0x00000006  [  7] _objc_autoreleasePoolPop
    0x10000180A 0x00000006  [  7] _objc_autoreleasePoolPush
    0x100001810 0x00000006  [  7] _objc_msgSend
    0x100001816 0x00000006  [  7] _objc_msgSendSuper2
    0x10000181C 0x00000006  [  7] _objc_release
    0x100001822 0x00000006  [  7] _objc_retain
    0x100001828 0x00000006  [  7] _objc_retainAutorelease
    0x10000182E 0x00000006  [  7] _objc_retainAutoreleaseReturnValue
    0x100001834 0x00000006  [  7] _objc_retainAutoreleasedReturnValue
    0x10000183A 0x00000006  [  7] _objc_storeStrong
    0x100001840 0x00000006  [  8] _puts
    0x100001848 0x00000010  [  0] helper helper
    0x100001858 0x0000000A  [  6] _NSLog
    0x100001862 0x0000000A  [  6] _NSStringFromClass
    0x10000186C 0x0000000A  [  7] _objc_autoreleasePoolPop
    0x100001876 0x0000000A  [  7] _objc_autoreleasePoolPush
    0x100001880 0x0000000A  [  7] _objc_msgSend
    0x10000188A 0x0000000A  [  7] _objc_msgSendSuper2
    0x100001894 0x0000000A  [  7] _objc_release
    0x10000189E 0x0000000A  [  7] _objc_retain
    0x1000018A8 0x0000000A  [  7] _objc_retainAutorelease
    0x1000018B2 0x0000000A  [  7] _objc_retainAutoreleaseReturnValue
    0x1000018BC 0x0000000A  [  7] _objc_retainAutoreleasedReturnValue
    0x1000018C6 0x0000000A  [  7] _objc_storeStrong
    0x1000018D0 0x0000000A  [  8] __Block_object_assign
    0x1000018DA 0x0000000A  [  8] __Block_object_dispose
    0x1000018E4 0x0000000A  [  8] __Unwind_Resume
    0x1000018EE 0x0000000A  [  8] _dispatch_async
    0x1000018F8 0x0000000A  [  8] _puts
    0x100001902 0x0000000A  [  9] _UIApplicationMain
    0x10000190C 0x0000000C  [  2] literal string: viewDidLoad
    0x100001918 0x00000018  [  2] literal string: didReceiveMemoryWarning
    0x100001930 0x0000001F  [  3] literal string: applicationDidFinishLaunching:
    0x10000194F 0x0000002C  [  3] literal string: application:willFinishLaunchingWithOptions:
    0x10000197B 0x0000002B  [  3] literal string: application:didFinishLaunchingWithOptions:
    0x1000019A6 0x0000001C  [  3] literal string: applicationDidBecomeActive:
    0x1000019C2 0x0000001D  [  3] literal string: applicationWillResignActive:
    0x1000019DF 0x0000001B  [  3] literal string: application:handleOpenURL:
    0x1000019FA 0x00000032  [  3] literal string: application:openURL:sourceApplication:annotation:
    0x100001A2C 0x0000001D  [  3] literal string: application:openURL:options:
    0x100001A49 0x00000024  [  3] literal string: applicationDidReceiveMemoryWarning:
    0x100001A6D 0x0000001A  [  3] literal string: applicationWillTerminate:
    0x100001A87 0x00000022  [  3] literal string: applicationSignificantTimeChange:
    0x100001AA9 0x00000035  [  3] literal string: application:willChangeStatusBarOrientation:duration:
    0x100001ADE 0x0000002B  [  3] literal string: application:didChangeStatusBarOrientation:
    0x100001B09 0x00000026  [  3] literal string: application:willChangeStatusBarFrame:
    0x100001B2F 0x00000025  [  3] literal string: application:didChangeStatusBarFrame:
    0x100001B54 0x00000031  [  3] literal string: application:didRegisterUserNotificationSettings:
    0x100001B85 0x0000003E  [  3] literal string: application:didRegisterForRemoteNotificationsWithDeviceToken:
    0x100001BC3 0x0000003E  [  3] literal string: application:didFailToRegisterForRemoteNotificationsWithError:
    0x100001C01 0x0000002A  [  3] literal string: application:didReceiveRemoteNotification:
    0x100001C2B 0x00000029  [  3] literal string: application:didReceiveLocalNotification:
    0x100001C54 0x0000004F  [  3] literal string: application:handleActionWithIdentifier:forLocalNotification:completionHandler:
    0x100001CA3 0x00000061  [  3] literal string: application:handleActionWithIdentifier:forRemoteNotification:withResponseInfo:completionHandler:
    0x100001D04 0x00000050  [  3] literal string: application:handleActionWithIdentifier:forRemoteNotification:completionHandler:
    0x100001D54 0x00000060  [  3] literal string: application:handleActionWithIdentifier:forLocalNotification:withResponseInfo:completionHandler:
    0x100001DB4 0x00000041  [  3] literal string: application:didReceiveRemoteNotification:fetchCompletionHandler:
    0x100001DF5 0x0000002F  [  3] literal string: application:performFetchWithCompletionHandler:
    0x100001E24 0x0000003C  [  3] literal string: application:performActionForShortcutItem:completionHandler:
    0x100001E60 0x00000043  [  3] literal string: application:handleEventsForBackgroundURLSession:completionHandler:
    0x100001EA3 0x00000032  [  3] literal string: application:handleWatchKitExtensionRequest:reply:
    0x100001ED5 0x0000002D  [  3] literal string: applicationShouldRequestHealthAuthorization:
    0x100001F02 0x0000001F  [  3] literal string: applicationDidEnterBackground:
    0x100001F21 0x00000020  [  3] literal string: applicationWillEnterForeground:
    0x100001F41 0x0000002F  [  3] literal string: applicationProtectedDataWillBecomeUnavailable:
    0x100001F70 0x0000002C  [  3] literal string: applicationProtectedDataDidBecomeAvailable:
    0x100001F9C 0x00000035  [  3] literal string: application:supportedInterfaceOrientationsForWindow:
    0x100001FD1 0x00000031  [  3] literal string: application:shouldAllowExtensionPointIdentifier:
    0x100002002 0x0000003F  [  3] literal string: application:viewControllerWithRestorationIdentifierPath:coder:
    0x100002041 0x00000028  [  3] literal string: application:shouldSaveApplicationState:
    0x100002069 0x0000002B  [  3] literal string: application:shouldRestoreApplicationState:
    0x100002094 0x00000030  [  3] literal string: application:willEncodeRestorableStateWithCoder:
    0x1000020C4 0x0000002F  [  3] literal string: application:didDecodeRestorableStateWithCoder:
    0x1000020F3 0x0000002E  [  3] literal string: application:willContinueUserActivityWithType:
    0x100002121 0x00000035  [  3] literal string: application:continueUserActivity:restorationHandler:
    0x100002156 0x00000039  [  3] literal string: application:didFailToContinueUserActivityWithType:error:
    0x10000218F 0x00000023  [  3] literal string: application:didUpdateUserActivity:
    0x1000021B2 0x00000034  [  3] literal string: application:userDidAcceptCloudKitShareWithMetadata:
    0x1000021E6 0x00000007  [  3] literal string: window
    0x1000021ED 0x0000000B  [  3] literal string: setWindow:
    0x1000021F8 0x00000009  [  3] literal string: isEqual:
    0x100002201 0x00000006  [  3] literal string: class
    0x100002207 0x00000005  [  3] literal string: self
    0x10000220C 0x00000011  [  3] literal string: performSelector:
    0x10000221D 0x0000001C  [  3] literal string: performSelector:withObject:
    0x100002239 0x00000027  [  3] literal string: performSelector:withObject:withObject:
    0x100002260 0x00000008  [  3] literal string: isProxy
    0x100002268 0x0000000F  [  3] literal string: isKindOfClass:
    0x100002277 0x00000011  [  3] literal string: isMemberOfClass:
    0x100002288 0x00000014  [  3] literal string: conformsToProtocol:
    0x10000229C 0x00000014  [  3] literal string: respondsToSelector:
    0x1000022B0 0x00000007  [  3] literal string: retain
    0x1000022B7 0x00000008  [  3] literal string: release
    0x1000022BF 0x0000000C  [  3] literal string: autorelease
    0x1000022CB 0x0000000C  [  3] literal string: retainCount
    0x1000022D7 0x00000005  [  3] literal string: zone
    0x1000022DC 0x00000005  [  3] literal string: hash
    0x1000022E1 0x0000000B  [  3] literal string: superclass
    0x1000022EC 0x0000000C  [  3] literal string: description
    0x1000022F8 0x00000011  [  3] literal string: debugDescription
    0x100002309 0x0000000E  [  3] literal string: .cxx_destruct
    0x100002317 0x00000008  [  3] literal string: _window
    0x10000231F 0x00000012  [  4] literal string: stringWithFormat:
    0x100002331 0x0000000B  [  4] literal string: UTF8String
    0x10000233C 0x00000020  [  4] literal string: getSomeResultWithString:number:
    0x10000235C 0x0000000C  [  4] literal string: propertyObj
    0x100002368 0x00000010  [  4] literal string: setPropertyObj:
    0x100002378 0x0000000B  [  4] literal string: sampleName
    0x100002383 0x0000000F  [  4] literal string: setSampleName:
    0x100002392 0x00000009  [  4] literal string: sampleId
    0x10000239B 0x0000000D  [  4] literal string: setSampleId:
    0x1000023A8 0x0000000D  [  4] literal string: _propertyObj
    0x1000023B5 0x0000000C  [  4] literal string: _sampleName
    0x1000023C1 0x0000000A  [  4] literal string: _sampleId
    0x1000023CB 0x00000004  [  5] literal string: new
    0x1000023CF 0x0000000F  [  5] literal string: numberWithInt:
    0x1000023DE 0x0000000F  [  2] literal string: ViewController
    0x1000023ED 0x0000000C  [  3] literal string: AppDelegate
    0x1000023F9 0x00000016  [  3] literal string: UIApplicationDelegate
    0x10000240F 0x00000009  [  3] literal string: NSObject
    0x100002418 0x00000002  [  3] literal string: �
    0x10000241A 0x0000000D  [  4] literal string: SampleObject
    0x100002427 0x00000002  [  4] literal string: �
    0x100002429 0x00000008  [  2] literal string: v16@0:8
    0x100002431 0x0000000B  [  3] literal string: v24@0:8@16
    0x10000243C 0x0000001A  [  3] literal string: v24@0:8@"UIApplication"16
    0x100002456 0x0000000E  [  3] literal string: B32@0:8@16@24
    0x100002464 0x0000002B  [  3] literal string: B32@0:8@"UIApplication"16@"NSDictionary"24
    0x10000248F 0x00000024  [  3] literal string: B32@0:8@"UIApplication"16@"NSURL"24
    0x1000024B3 0x00000014  [  3] literal string: B48@0:8@16@24@32@40
    0x1000024C7 0x00000034  [  3] literal string: B48@0:8@"UIApplication"16@"NSURL"24@"NSString"32@40
    0x1000024FB 0x00000011  [  3] literal string: B40@0:8@16@24@32
    0x10000250C 0x00000035  [  3] literal string: B40@0:8@"UIApplication"16@"NSURL"24@"NSDictionary"32
    0x100002541 0x00000011  [  3] literal string: v40@0:8@16q24d32
    0x100002552 0x00000020  [  3] literal string: v40@0:8@"UIApplication"16q24d32
    0x100002572 0x0000000E  [  3] literal string: v32@0:8@16q24
    0x100002580 0x0000001D  [  3] literal string: v32@0:8@"UIApplication"16q24
    0x10000259D 0x0000002D  [  3] literal string: v56@0:8@16{CGRect={CGPoint=dd}{CGSize=dd}}24
    0x1000025CA 0x0000003C  [  3] literal string: v56@0:8@"UIApplication"16{CGRect={CGPoint=dd}{CGSize=dd}}24
    0x100002606 0x0000000E  [  3] literal string: v32@0:8@16@24
    0x100002614 0x00000039  [  3] literal string: v32@0:8@"UIApplication"16@"UIUserNotificationSettings"24
    0x10000264D 0x00000025  [  3] literal string: v32@0:8@"UIApplication"16@"NSData"24
    0x100002672 0x00000026  [  3] literal string: v32@0:8@"UIApplication"16@"NSError"24
    0x100002698 0x0000002B  [  3] literal string: v32@0:8@"UIApplication"16@"NSDictionary"24
    0x1000026C3 0x00000032  [  3] literal string: v32@0:8@"UIApplication"16@"UILocalNotification"24
    0x1000026F5 0x00000015  [  3] literal string: v48@0:8@16@24@32@?40
    0x10000270A 0x00000048  [  3] literal string: v48@0:8@"UIApplication"16@"NSString"24@"UILocalNotification"32@?<v@?>40
    0x100002752 0x00000018  [  3] literal string: v56@0:8@16@24@32@40@?48
    0x10000276A 0x00000052  [  3] literal string: v56@0:8@"UIApplication"16@"NSString"24@"NSDictionary"32@"NSDictionary"40@?<v@?>48
    0x1000027BC 0x00000041  [  3] literal string: v48@0:8@"UIApplication"16@"NSString"24@"NSDictionary"32@?<v@?>40
    0x1000027FD 0x00000059  [  3] literal string: v56@0:8@"UIApplication"16@"NSString"24@"UILocalNotification"32@"NSDictionary"40@?<v@?>48
    0x100002856 0x00000012  [  3] literal string: v40@0:8@16@24@?32
    0x100002868 0x00000035  [  3] literal string: v40@0:8@"UIApplication"16@"NSDictionary"24@?<v@?Q>32
    0x10000289D 0x0000000F  [  3] literal string: v32@0:8@16@?24
    0x1000028AC 0x00000024  [  3] literal string: v32@0:8@"UIApplication"16@?<v@?Q>24
    0x1000028D0 0x00000042  [  3] literal string: v40@0:8@"UIApplication"16@"UIApplicationShortcutItem"24@?<v@?B>32
    0x100002912 0x00000030  [  3] literal string: v40@0:8@"UIApplication"16@"NSString"24@?<v@?>32
    0x100002942 0x00000043  [  3] literal string: v40@0:8@"UIApplication"16@"NSDictionary"24@?<v@?@"NSDictionary">32
    0x100002985 0x0000000E  [  3] literal string: Q32@0:8@16@24
    0x100002993 0x00000027  [  3] literal string: Q32@0:8@"UIApplication"16@"UIWindow"24
    0x1000029BA 0x00000027  [  3] literal string: B32@0:8@"UIApplication"16@"NSString"24
    0x1000029E1 0x00000011  [  3] literal string: @40@0:8@16@24@32
    0x1000029F2 0x00000044  [  3] literal string: @"UIViewController"40@0:8@"UIApplication"16@"NSArray"24@"NSCoder"32
    0x100002A36 0x00000026  [  3] literal string: B32@0:8@"UIApplication"16@"NSCoder"24
    0x100002A5C 0x00000026  [  3] literal string: v32@0:8@"UIApplication"16@"NSCoder"24
    0x100002A82 0x00000012  [  3] literal string: B40@0:8@16@24@?32
    0x100002A94 0x00000040  [  3] literal string: B40@0:8@"UIApplication"16@"NSUserActivity"24@?<v@?@"NSArray">32
    0x100002AD4 0x00000011  [  3] literal string: v40@0:8@16@24@32
    0x100002AE5 0x00000033  [  3] literal string: v40@0:8@"UIApplication"16@"NSString"24@"NSError"32
    0x100002B18 0x0000002D  [  3] literal string: v32@0:8@"UIApplication"16@"NSUserActivity"24
    0x100002B45 0x0000002E  [  3] literal string: v32@0:8@"UIApplication"16@"CKShareMetadata"24
    0x100002B73 0x00000008  [  3] literal string: @16@0:8
    0x100002B7B 0x00000012  [  3] literal string: @"UIWindow"16@0:8
    0x100002B8D 0x00000015  [  3] literal string: v24@0:8@"UIWindow"16
    0x100002BA2 0x0000000B  [  3] literal string: B24@0:8@16
    0x100002BAD 0x00000008  [  3] literal string: #16@0:8
    0x100002BB5 0x0000000B  [  3] literal string: @24@0:8:16
    0x100002BC0 0x0000000E  [  3] literal string: @32@0:8:16@24
    0x100002BCE 0x00000011  [  3] literal string: @40@0:8:16@24@32
    0x100002BDF 0x00000008  [  3] literal string: B16@0:8
    0x100002BE7 0x0000000B  [  3] literal string: B24@0:8#16
    0x100002BF2 0x00000015  [  3] literal string: B24@0:8@"Protocol"16
    0x100002C07 0x0000000B  [  3] literal string: B24@0:8:16
    0x100002C12 0x00000009  [  3] literal string: Vv16@0:8
    0x100002C1B 0x00000008  [  3] literal string: Q16@0:8
    0x100002C23 0x00000012  [  3] literal string: ^{_NSZone=}16@0:8
    0x100002C35 0x00000012  [  3] literal string: @"NSString"16@0:8
    0x100002C47 0x0000000C  [  3] literal string: @"UIWindow"
    0x100002C53 0x0000000B  [  4] literal string: v24@0:8Q16
    0x100002C5E 0x0000000C  [  4] literal string: @"NSObject"
    0x100002C6A 0x0000000C  [  4] literal string: @"NSString"
    0x100002C76 0x00000002  [  4] literal string: Q
    0x100002C78 0x00000005  [  3] literal string: hash
    0x100002C7D 0x00000005  [  3] literal string: TQ,R
    0x100002C82 0x0000000B  [  3] literal string: superclass
    0x100002C8D 0x00000005  [  3] literal string: T#,R
    0x100002C92 0x0000000C  [  3] literal string: description
    0x100002C9E 0x00000011  [  3] literal string: T@"NSString",R,C
    0x100002CAF 0x00000011  [  3] literal string: debugDescription
    0x100002CC0 0x00000007  [  3] literal string: window
    0x100002CC7 0x00000011  [  3] literal string: T@"UIWindow",&,N
    0x100002CD8 0x0000001A  [  3] literal string: T@"UIWindow",&,N,V_window
    0x100002CF2 0x00000010  [  4] literal string: SampleObjectKey
    0x100002D02 0x00000006  [  4] literal string: %@:%@
    0x100002D08 0x0000000B  [  4] literal string: %@:%@:%lul
    0x100002D13 0x0000001E  [  4] literal string: composite string:%@,succeeded
    0x100002D31 0x00000006  [  4] literal string: v8@?0
    0x100002D37 0x0000000B  [  4] literal string: sampleName
    0x100002D42 0x0000001E  [  4] literal string: T@"NSString",&,N,V_sampleName
    0x100002D60 0x00000009  [  4] literal string: sampleId
    0x100002D69 0x00000010  [  4] literal string: TQ,N,V_sampleId
    0x100002D79 0x0000000C  [  4] literal string: propertyObj
    0x100002D85 0x0000001F  [  4] literal string: T@"NSObject",&,N,V_propertyObj
    0x100002DA4 0x00000003  [  5] literal string: ab
    0x100002DA8 0x0000002C  [  4] GCC_except_table0
    0x100002DD4 0x00000048  [  4] GCC_except_table3
    0x100002E1C 0x0000016A  [  1] opaque_section
    0x100002F88 0x00000074  [  0] compact unwind info
    0x100003000 0x00000008  [  0] non-lazy-pointer-to-local: dyld_stub_binder
    0x100003008 0x00000008  [  0] non-lazy-pointer
    0x100003010 0x00000008  [  0] non-lazy-pointer-to-local: __NSConcreteStackBlock
    0x100003018 0x00000008  [  0] non-lazy-pointer-to-local: ___gxx_personality_v0
    0x100003020 0x00000008  [  0] non-lazy-pointer-to-local: __dispatch_main_q
    0x100003028 0x00000008  [  0] non-lazy-pointer-to-local: _objc_msgSend
    0x100003030 0x00000008  [  6] _NSLog
    0x100003038 0x00000008  [  6] _NSStringFromClass
    0x100003040 0x00000008  [  9] _UIApplicationMain
    0x100003048 0x00000008  [  8] __Block_object_assign
    0x100003050 0x00000008  [  8] __Block_object_dispose
    0x100003058 0x00000008  [  8] __Unwind_Resume
    0x100003060 0x00000008  [  8] _dispatch_async
    0x100003068 0x00000008  [  7] _objc_autoreleasePoolPop
    0x100003070 0x00000008  [  7] _objc_autoreleasePoolPush
    0x100003078 0x00000008  [  7] _objc_msgSend
    0x100003080 0x00000008  [  7] _objc_msgSendSuper2
    0x100003088 0x00000008  [  7] _objc_release
    0x100003090 0x00000008  [  7] _objc_retain
    0x100003098 0x00000008  [  7] _objc_retainAutorelease
    0x1000030A0 0x00000008  [  7] _objc_retainAutoreleaseReturnValue
    0x1000030A8 0x00000008  [  7] _objc_retainAutoreleasedReturnValue
    0x1000030B0 0x00000008  [  7] _objc_storeStrong
    0x1000030B8 0x00000008  [  8] _puts
    0x1000030C0 0x00000030  [  4] ___block_descriptor_tmp
    0x1000030F0 0x00000020  [  4] CFString
    0x100003110 0x00000020  [  4] CFString
    0x100003130 0x00000020  [  4] CFString
    0x100003150 0x00000020  [  4] CFString
    0x100003170 0x00000020  [  5] CFString
    0x100003190 0x00000008  [  2] anon
    0x100003198 0x00000008  [  3] anon
    0x1000031A0 0x00000008  [  4] anon
    0x1000031A8 0x00000008  [  3] l_OBJC_LABEL_PROTOCOL_$_NSObject
    0x1000031B0 0x00000008  [  3] l_OBJC_LABEL_PROTOCOL_$_UIApplicationDelegate
    0x1000031B8 0x00000008  [  0] objc image info
    0x1000031C0 0x00000048  [  2] l_OBJC_METACLASS_RO_$_ViewController
    0x100003208 0x00000038  [  2] l_OBJC_$_INSTANCE_METHODS_ViewController
    0x100003240 0x00000048  [  2] l_OBJC_CLASS_RO_$_ViewController
    0x100003288 0x000001D0  [  3] l_OBJC_$_PROTOCOL_INSTANCE_METHODS_NSObject
    0x100003458 0x00000020  [  3] l_OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_NSObject
    0x100003478 0x00000048  [  3] l_OBJC_$_PROP_LIST_NSObject
    0x1000034C0 0x000000A0  [  3] l_OBJC_$_PROTOCOL_METHOD_TYPES_NSObject
    0x100003560 0x00000018  [  3] l_OBJC_$_PROTOCOL_REFS_UIApplicationDelegate
    0x100003578 0x00000488  [  3] l_OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_UIApplicationDelegate
    0x100003A00 0x00000018  [  3] l_OBJC_$_PROP_LIST_UIApplicationDelegate
    0x100003A18 0x00000180  [  3] l_OBJC_$_PROTOCOL_METHOD_TYPES_UIApplicationDelegate
    0x100003B98 0x00000018  [  3] l_OBJC_CLASS_PROTOCOLS_$_AppDelegate
    0x100003BB0 0x00000048  [  3] l_OBJC_METACLASS_RO_$_AppDelegate
    0x100003BF8 0x000000E0  [  3] l_OBJC_$_INSTANCE_METHODS_AppDelegate
    0x100003CD8 0x00000028  [  3] l_OBJC_$_INSTANCE_VARIABLES_AppDelegate
    0x100003D00 0x00000058  [  3] l_OBJC_$_PROP_LIST_AppDelegate
    0x100003D58 0x00000048  [  3] l_OBJC_CLASS_RO_$_AppDelegate
    0x100003DA0 0x00000048  [  4] l_OBJC_METACLASS_RO_$_SampleObject
    0x100003DE8 0x000000C8  [  4] l_OBJC_$_INSTANCE_METHODS_SampleObject
    0x100003EB0 0x00000068  [  4] l_OBJC_$_INSTANCE_VARIABLES_SampleObject
    0x100003F18 0x00000038  [  4] l_OBJC_$_PROP_LIST_SampleObject
    0x100003F50 0x00000048  [  4] l_OBJC_CLASS_RO_$_SampleObject
    0x100003F98 0x00000008  [  2] pointer-to-literal-cstring
    0x100003FA0 0x00000008  [  2] pointer-to-literal-cstring
    0x100003FA8 0x00000008  [  4] pointer-to-literal-cstring
    0x100003FB0 0x00000008  [  4] pointer-to-literal-cstring
    0x100003FB8 0x00000008  [  5] pointer-to-literal-cstring
    0x100003FC0 0x00000008  [  5] pointer-to-literal-cstring
    0x100003FC8 0x00000008  [  5] pointer-to-literal-cstring
    0x100003FD0 0x00000008  [  5] pointer-to-literal-cstring
    0x100003FD8 0x00000008  [  5] pointer-to-literal-cstring
    0x100003FE0 0x00000008  [  4] objc-class-ref
    0x100003FE8 0x00000008  [  5] objc-class-ref
    0x100003FF0 0x00000008  [  5] objc-class-ref
    0x100003FF8 0x00000008  [  5] objc-class-ref
    0x100004000 0x00000008  [  5] objc-class-ref
    0x100004008 0x00000008  [  2] anon
    0x100004010 0x00000008  [  3] _OBJC_IVAR_$_AppDelegate._window
    0x100004018 0x00000008  [  4] _OBJC_IVAR_$_SampleObject._propertyObj
    0x100004020 0x00000008  [  4] _OBJC_IVAR_$_SampleObject._sampleName
    0x100004028 0x00000008  [  4] _OBJC_IVAR_$_SampleObject._sampleId
    0x100004030 0x00000028  [  2] _OBJC_CLASS_$_ViewController
    0x100004058 0x00000028  [  2] _OBJC_METACLASS_$_ViewController
    0x100004080 0x00000028  [  3] _OBJC_METACLASS_$_AppDelegate
    0x1000040A8 0x00000028  [  3] _OBJC_CLASS_$_AppDelegate
    0x1000040D0 0x00000028  [  4] _OBJC_METACLASS_$_SampleObject
    0x1000040F8 0x00000028  [  4] _OBJC_CLASS_$_SampleObject
    0x100004120 0x00000060  [  3] l_OBJC_PROTOCOL_$_NSObject
    0x100004180 0x00000060  [  3] l_OBJC_PROTOCOL_$_UIApplicationDelegate
    0x1000041E0 0x00000008  [  4] _cntstr
    
    # Dead Stripped Symbols:
    #           Size        File  Name
    <<dead>>    0x00000018  [  2] CIE
    <<dead>>    0x00000008  [  3] literal string: v16@0:8
    <<dead>>    0x00000018  [  3] CIE
    <<dead>>    0x0000000E  [  4] literal string: .cxx_destruct
    <<dead>>    0x0000000E  [  4] literal string: v32@0:8@16@24
    <<dead>>    0x00000008  [  4] literal string: v16@0:8
    <<dead>>    0x00000008  [  4] literal string: @16@0:8
    <<dead>>    0x0000000B  [  4] literal string: v24@0:8@16
    <<dead>>    0x00000008  [  4] literal string: Q16@0:8
    <<dead>>    0x00000020  [  4] CIE
    <<dead>>    0x00000018  [  4] CIE
    <<dead>>    0x00000010  [  5] literal string: setPropertyObj:
    <<dead>>    0x00000020  [  5] literal string: getSomeResultWithString:number:
    <<dead>>    0x00000006  [  5] literal string: class
    <<dead>>    0x00000018  [  5] CIE
    

    使用反汇编工具对执行文件进行反汇编可以对Mach-O文件有一个直观的认识:

    bogon:Downloads fangyang$ otool -tV SampleApp.app/SampleApp 
    SampleApp.app/SampleApp:
    (__TEXT,__text) section
    -[ViewController viewDidLoad]:
    0000000100000d80    pushq   %rbp
    0000000100000d81    movq    %rsp, %rbp
    0000000100000d84    subq    $0x20, %rsp
    0000000100000d88    leaq    -0x20(%rbp), %rax
    0000000100000d8c    movq    %rdi, -0x8(%rbp)
    0000000100000d90    movq    %rsi, -0x10(%rbp)
    0000000100000d94    movq    -0x8(%rbp), %rsi
    0000000100000d98    movq    %rsi, -0x20(%rbp)
    0000000100000d9c    movq    0x3265(%rip), %rsi ## Objc class ref: ViewController
    0000000100000da3    movq    %rsi, -0x18(%rbp)
    0000000100000da7    movq    0x31ea(%rip), %rsi ## Objc selector ref: viewDidLoad
    0000000100000dae    movq    %rax, %rdi
    0000000100000db1    callq   0x100001816 ## Objc message: -[[%rdi super] viewDidLoad]
    0000000100000db6    addq    $0x20, %rsp
    0000000100000dba    popq    %rbp
    0000000100000dbb    retq
    0000000100000dbc    nopl    (%rax)
    -[ViewController didReceiveMemoryWarning]:
    0000000100000dc0    pushq   %rbp
    0000000100000dc1    movq    %rsp, %rbp
    0000000100000dc4    subq    $0x20, %rsp
    0000000100000dc8    leaq    -0x20(%rbp), %rax
    0000000100000dcc    movq    %rdi, -0x8(%rbp)
    0000000100000dd0    movq    %rsi, -0x10(%rbp)
    0000000100000dd4    movq    -0x8(%rbp), %rsi
    0000000100000dd8    movq    %rsi, -0x20(%rbp)
    0000000100000ddc    movq    0x3225(%rip), %rsi ## Objc class ref: ViewController
    0000000100000de3    movq    %rsi, -0x18(%rbp)
    0000000100000de7    movq    0x31b2(%rip), %rsi ## Objc selector ref: didReceiveMemoryWarning
    0000000100000dee    movq    %rax, %rdi
    0000000100000df1    callq   0x100001816 ## Objc message: -[[%rdi super] didReceiveMemoryWarning]
    0000000100000df6    addq    $0x20, %rsp
    0000000100000dfa    popq    %rbp
    0000000100000dfb    retq
    0000000100000dfc    nop
    0000000100000dfd    nop
    0000000100000dfe    nop
    0000000100000dff    nop
    -[AppDelegate application:didFinishLaunchingWithOptions:]:
    0000000100000e00    pushq   %rbp
    0000000100000e01    movq    %rsp, %rbp
    0000000100000e04    subq    $0x30, %rsp
    0000000100000e08    leaq    -0x18(%rbp), %rax
    0000000100000e0c    movq    %rdi, -0x8(%rbp)
    0000000100000e10    movq    %rsi, -0x10(%rbp)
    0000000100000e14    movq    $0x0, -0x18(%rbp)
    0000000100000e1c    movq    %rax, %rdi
    0000000100000e1f    movq    %rdx, %rsi
    0000000100000e22    movq    %rcx, -0x28(%rbp)
    0000000100000e26    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000e2b    leaq    -0x20(%rbp), %rax
    0000000100000e2f    movq    $0x0, -0x20(%rbp)
    0000000100000e37    movq    -0x28(%rbp), %rcx
    0000000100000e3b    movq    %rax, %rdi
    0000000100000e3e    movq    %rcx, %rsi
    0000000100000e41    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000e46    xorl    %r8d, %r8d
    0000000100000e49    movl    %r8d, %esi
    0000000100000e4c    leaq    -0x20(%rbp), %rax
    0000000100000e50    movq    %rax, %rdi
    0000000100000e53    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000e58    xorl    %r8d, %r8d
    0000000100000e5b    movl    %r8d, %esi
    0000000100000e5e    leaq    -0x18(%rbp), %rax
    0000000100000e62    movq    %rax, %rdi
    0000000100000e65    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000e6a    movb    $0x1, %r9b
    0000000100000e6d    andb    $0x1, %r9b
    0000000100000e71    movzbl  %r9b, %eax
    0000000100000e75    addq    $0x30, %rsp
    0000000100000e79    popq    %rbp
    0000000100000e7a    retq
    0000000100000e7b    nopl    (%rax,%rax)
    -[AppDelegate applicationWillResignActive:]:
    0000000100000e80    pushq   %rbp
    0000000100000e81    movq    %rsp, %rbp
    0000000100000e84    subq    $0x20, %rsp
    0000000100000e88    leaq    -0x18(%rbp), %rax
    0000000100000e8c    movq    %rdi, -0x8(%rbp)
    0000000100000e90    movq    %rsi, -0x10(%rbp)
    0000000100000e94    movq    $0x0, -0x18(%rbp)
    0000000100000e9c    movq    %rax, %rdi
    0000000100000e9f    movq    %rdx, %rsi
    0000000100000ea2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000ea7    xorl    %ecx, %ecx
    0000000100000ea9    movl    %ecx, %esi
    0000000100000eab    leaq    -0x18(%rbp), %rax
    0000000100000eaf    movq    %rax, %rdi
    0000000100000eb2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000eb7    addq    $0x20, %rsp
    0000000100000ebb    popq    %rbp
    0000000100000ebc    retq
    0000000100000ebd    nopl    (%rax)
    -[AppDelegate applicationDidEnterBackground:]:
    0000000100000ec0    pushq   %rbp
    0000000100000ec1    movq    %rsp, %rbp
    0000000100000ec4    subq    $0x20, %rsp
    0000000100000ec8    leaq    -0x18(%rbp), %rax
    0000000100000ecc    movq    %rdi, -0x8(%rbp)
    0000000100000ed0    movq    %rsi, -0x10(%rbp)
    0000000100000ed4    movq    $0x0, -0x18(%rbp)
    0000000100000edc    movq    %rax, %rdi
    0000000100000edf    movq    %rdx, %rsi
    0000000100000ee2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000ee7    xorl    %ecx, %ecx
    0000000100000ee9    movl    %ecx, %esi
    0000000100000eeb    leaq    -0x18(%rbp), %rax
    0000000100000eef    movq    %rax, %rdi
    0000000100000ef2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000ef7    addq    $0x20, %rsp
    0000000100000efb    popq    %rbp
    0000000100000efc    retq
    0000000100000efd    nopl    (%rax)
    -[AppDelegate applicationWillEnterForeground:]:
    0000000100000f00    pushq   %rbp
    0000000100000f01    movq    %rsp, %rbp
    0000000100000f04    subq    $0x20, %rsp
    0000000100000f08    leaq    -0x18(%rbp), %rax
    0000000100000f0c    movq    %rdi, -0x8(%rbp)
    0000000100000f10    movq    %rsi, -0x10(%rbp)
    0000000100000f14    movq    $0x0, -0x18(%rbp)
    0000000100000f1c    movq    %rax, %rdi
    0000000100000f1f    movq    %rdx, %rsi
    0000000100000f22    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000f27    xorl    %ecx, %ecx
    0000000100000f29    movl    %ecx, %esi
    0000000100000f2b    leaq    -0x18(%rbp), %rax
    0000000100000f2f    movq    %rax, %rdi
    0000000100000f32    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000f37    addq    $0x20, %rsp
    0000000100000f3b    popq    %rbp
    0000000100000f3c    retq
    0000000100000f3d    nopl    (%rax)
    -[AppDelegate applicationDidBecomeActive:]:
    0000000100000f40    pushq   %rbp
    0000000100000f41    movq    %rsp, %rbp
    0000000100000f44    subq    $0x20, %rsp
    0000000100000f48    leaq    -0x18(%rbp), %rax
    0000000100000f4c    movq    %rdi, -0x8(%rbp)
    0000000100000f50    movq    %rsi, -0x10(%rbp)
    0000000100000f54    movq    $0x0, -0x18(%rbp)
    0000000100000f5c    movq    %rax, %rdi
    0000000100000f5f    movq    %rdx, %rsi
    0000000100000f62    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000f67    xorl    %ecx, %ecx
    0000000100000f69    movl    %ecx, %esi
    0000000100000f6b    leaq    -0x18(%rbp), %rax
    0000000100000f6f    movq    %rax, %rdi
    0000000100000f72    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000f77    addq    $0x20, %rsp
    0000000100000f7b    popq    %rbp
    0000000100000f7c    retq
    0000000100000f7d    nopl    (%rax)
    -[AppDelegate applicationWillTerminate:]:
    0000000100000f80    pushq   %rbp
    0000000100000f81    movq    %rsp, %rbp
    0000000100000f84    subq    $0x20, %rsp
    0000000100000f88    leaq    -0x18(%rbp), %rax
    0000000100000f8c    movq    %rdi, -0x8(%rbp)
    0000000100000f90    movq    %rsi, -0x10(%rbp)
    0000000100000f94    movq    $0x0, -0x18(%rbp)
    0000000100000f9c    movq    %rax, %rdi
    0000000100000f9f    movq    %rdx, %rsi
    0000000100000fa2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000fa7    xorl    %ecx, %ecx
    0000000100000fa9    movl    %ecx, %esi
    0000000100000fab    leaq    -0x18(%rbp), %rax
    0000000100000faf    movq    %rax, %rdi
    0000000100000fb2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100000fb7    addq    $0x20, %rsp
    0000000100000fbb    popq    %rbp
    0000000100000fbc    retq
    0000000100000fbd    nopl    (%rax)
    -[AppDelegate window]:
    0000000100000fc0    pushq   %rbp
    0000000100000fc1    movq    %rsp, %rbp
    0000000100000fc4    movq    %rdi, -0x8(%rbp)
    0000000100000fc8    movq    %rsi, -0x10(%rbp)
    0000000100000fcc    movq    -0x8(%rbp), %rsi
    0000000100000fd0    movq    _OBJC_IVAR_$_AppDelegate._window(%rip), %rdi
    0000000100000fd7    movq    (%rsi,%rdi), %rax
    0000000100000fdb    popq    %rbp
    0000000100000fdc    retq
    0000000100000fdd    nopl    (%rax)
    -[AppDelegate setWindow:]:
    0000000100000fe0    pushq   %rbp
    0000000100000fe1    movq    %rsp, %rbp
    0000000100000fe4    subq    $0x20, %rsp
    0000000100000fe8    movq    %rdi, -0x8(%rbp)
    0000000100000fec    movq    %rsi, -0x10(%rbp)
    0000000100000ff0    movq    %rdx, -0x18(%rbp)
    0000000100000ff4    movq    -0x18(%rbp), %rdx
    0000000100000ff8    movq    -0x8(%rbp), %rsi
    0000000100000ffc    movq    _OBJC_IVAR_$_AppDelegate._window(%rip), %rdi
    0000000100001003    addq    %rdi, %rsi
    0000000100001006    movq    %rsi, %rdi
    0000000100001009    movq    %rdx, %rsi
    000000010000100c    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001011    addq    $0x20, %rsp
    0000000100001015    popq    %rbp
    0000000100001016    retq
    0000000100001017    nopw    (%rax,%rax)
    -[AppDelegate .cxx_destruct]:
    0000000100001020    pushq   %rbp
    0000000100001021    movq    %rsp, %rbp
    0000000100001024    subq    $0x10, %rsp
    0000000100001028    xorl    %eax, %eax
    000000010000102a    movl    %eax, %ecx
    000000010000102c    movq    %rdi, -0x8(%rbp)
    0000000100001030    movq    %rsi, -0x10(%rbp)
    0000000100001034    movq    -0x8(%rbp), %rsi
    0000000100001038    movq    _OBJC_IVAR_$_AppDelegate._window(%rip), %rdi
    000000010000103f    addq    %rdi, %rsi
    0000000100001042    movq    %rsi, %rdi
    0000000100001045    movq    %rcx, %rsi
    0000000100001048    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000104d    addq    $0x10, %rsp
    0000000100001051    popq    %rbp
    0000000100001052    retq
    0000000100001053    nop
    0000000100001054    nop
    0000000100001055    nop
    0000000100001056    nop
    0000000100001057    nop
    0000000100001058    nop
    0000000100001059    nop
    000000010000105a    nop
    000000010000105b    nop
    000000010000105c    nop
    000000010000105d    nop
    000000010000105e    nop
    000000010000105f    nop
    -[SampleObject getSomeResultWithString:number:]:
    0000000100001060    pushq   %rbp
    0000000100001061    movq    %rsp, %rbp
    0000000100001064    subq    $0xe0, %rsp
    000000010000106b    movq    %rdi, -0x8(%rbp)
    000000010000106f    movq    %rsi, -0x10(%rbp)
    0000000100001073    movq    $0x0, -0x18(%rbp)
    000000010000107b    leaq    -0x18(%rbp), %rdi
    000000010000107f    movq    %rdx, %rsi
    0000000100001082    movq    %rcx, -0xb0(%rbp)
    0000000100001089    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000108e    movq    $0x0, -0x20(%rbp)
    0000000100001096    leaq    -0x20(%rbp), %rdi
    000000010000109a    movq    -0xb0(%rbp), %rsi
    00000001000010a1    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000010a6    movq    0x2f33(%rip), %rdi ## Objc class ref: _OBJC_CLASS_$_NSString
    00000001000010ad    movq    -0x18(%rbp), %rcx
    00000001000010b1    movq    -0x20(%rbp), %r8
    00000001000010b5    movq    0x2eec(%rip), %rsi ## Objc selector ref: stringWithFormat:
    00000001000010bc    leaq    0x204d(%rip), %rdx ## Objc cfstring ref: @"%@:%@"
    00000001000010c3    movq    0x1f5e(%rip), %rax ## Objc message: +[NSString stringWithFormat:]
    00000001000010ca    xorl    %r9d, %r9d
    00000001000010cd    movb    %r9b, %r10b
    00000001000010d0    movq    %rax, -0xb8(%rbp)
    00000001000010d7    movb    %r10b, %al
    00000001000010da    movq    -0xb8(%rbp), %r11
    00000001000010e1    callq   *%r11
    00000001000010e4    movq    %rax, -0xc0(%rbp)
    00000001000010eb    jmp 0x1000010f0
    00000001000010f0    movq    -0xc0(%rbp), %rdi
    00000001000010f7    callq   0x100001834 ## symbol stub for: _objc_retainAutoreleasedReturnValue
    00000001000010fc    movq    0x1f1d(%rip), %rdi ## literal pool symbol address: __dispatch_main_q
    0000000100001103    leaq    -0xa8(%rbp), %rcx
    000000010000110a    leaq    -0x70(%rbp), %rdx
    000000010000110e    leaq    ___Block_byref_object_dispose_(%rip), %rsi
    0000000100001115    leaq    ___Block_byref_object_copy_(%rip), %r8
    000000010000111c    movq    %rax, -0x28(%rbp)
    0000000100001120    movq    $0x7b, -0x40(%rbp)
    0000000100001128    movq    $0x0, -0x70(%rbp)
    0000000100001130    movq    %rdx, -0x68(%rbp)
    0000000100001134    movl    $0x32000000, -0x60(%rbp)
    000000010000113b    movl    $0x30, -0x5c(%rbp)
    0000000100001142    movq    %r8, -0x58(%rbp)
    0000000100001146    movq    %rsi, -0x50(%rbp)
    000000010000114a    movq    $0x0, -0x48(%rbp)
    0000000100001152    addq    $0x28, %rdx
    0000000100001156    addq    $0x20, %rcx
    000000010000115a    movq    %rdx, -0xc8(%rbp)
    0000000100001161    movq    %rcx, -0xd0(%rbp)
    0000000100001168    callq   0x10000182e ## symbol stub for: _objc_retainAutoreleaseReturnValue
    000000010000116d    movq    %rax, %rdi
    0000000100001170    callq   0x100001834 ## symbol stub for: _objc_retainAutoreleasedReturnValue
    0000000100001175    leaq    ___block_descriptor_tmp(%rip), %rcx
    000000010000117c    leaq    "___47-[SampleObject getSomeResultWithString:number:]_block_invoke"(%rip), %rdx
    0000000100001183    movq    0x1e86(%rip), %rsi ## literal pool symbol address: __NSConcreteStackBlock
    000000010000118a    movq    %rsi, -0xa8(%rbp)
    0000000100001191    movl    $0xc2000000, -0xa0(%rbp)
    000000010000119b    movl    $0x0, -0x9c(%rbp)
    00000001000011a5    movq    %rdx, -0x98(%rbp)
    00000001000011ac    movq    %rcx, -0x90(%rbp)
    00000001000011b3    movq    -0x28(%rbp), %rcx
    00000001000011b7    movq    %rcx, %rdi
    00000001000011ba    movq    %rax, -0xd8(%rbp)
    00000001000011c1    callq   0x100001822 ## symbol stub for: _objc_retain
    00000001000011c6    leaq    -0xa8(%rbp), %rcx
    00000001000011cd    leaq    -0x70(%rbp), %rdx
    00000001000011d1    movq    %rax, -0x88(%rbp)
    00000001000011d8    movq    -0x40(%rbp), %rax
    00000001000011dc    movq    %rax, -0x78(%rbp)
    00000001000011e0    movq    %rdx, -0x80(%rbp)
    00000001000011e4    movq    -0xd8(%rbp), %rdi
    00000001000011eb    movq    %rcx, %rsi
    00000001000011ee    callq   0x1000017fe ## symbol stub for: _dispatch_async
    00000001000011f3    movq    -0xd8(%rbp), %rax
    00000001000011fa    movq    %rax, %rdi
    00000001000011fd    callq   0x10000181c ## symbol stub for: _objc_release
    0000000100001202    xorl    %r9d, %r9d
    0000000100001205    movl    %r9d, %esi
    0000000100001208    movq    -0xd0(%rbp), %rax
    000000010000120f    movq    %rax, %rdi
    0000000100001212    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001217    movl    $0x8, %esi
    000000010000121c    leaq    -0x70(%rbp), %rax
    0000000100001220    movq    %rax, %rdi
    0000000100001223    callq   0x1000017f2 ## symbol stub for: __Block_object_dispose
    0000000100001228    xorl    %esi, %esi
    000000010000122a    movq    -0xc8(%rbp), %rax
    0000000100001231    movq    %rax, %rdi
    0000000100001234    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001239    xorl    %r9d, %r9d
    000000010000123c    movl    %r9d, %esi
    000000010000123f    leaq    -0x28(%rbp), %rax
    0000000100001243    movq    %rax, %rdi
    0000000100001246    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000124b    xorl    %r9d, %r9d
    000000010000124e    movl    %r9d, %esi
    0000000100001251    leaq    -0x20(%rbp), %rax
    0000000100001255    movq    %rax, %rdi
    0000000100001258    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000125d    xorl    %r9d, %r9d
    0000000100001260    movl    %r9d, %esi
    0000000100001263    leaq    -0x18(%rbp), %rax
    0000000100001267    movq    %rax, %rdi
    000000010000126a    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000126f    addq    $0xe0, %rsp
    0000000100001276    popq    %rbp
    0000000100001277    retq
    0000000100001278    xorl    %ecx, %ecx
    000000010000127a    movl    %ecx, %esi
    000000010000127c    leaq    -0x20(%rbp), %rdi
    0000000100001280    movl    %edx, %ecx
    0000000100001282    movq    %rax, -0x30(%rbp)
    0000000100001286    movl    %ecx, -0x34(%rbp)
    0000000100001289    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000128e    xorl    %ecx, %ecx
    0000000100001290    movl    %ecx, %esi
    0000000100001292    leaq    -0x18(%rbp), %rax
    0000000100001296    movq    %rax, %rdi
    0000000100001299    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000129e    movq    -0x30(%rbp), %rdi
    00000001000012a2    callq   0x1000017f8 ## symbol stub for: __Unwind_Resume
    00000001000012a7    nopw    (%rax,%rax)
    ___Block_byref_object_copy_:
    00000001000012b0    pushq   %rbp
    00000001000012b1    movq    %rsp, %rbp
    00000001000012b4    subq    $0x20, %rsp
    00000001000012b8    movq    %rdi, -0x8(%rbp)
    00000001000012bc    movq    %rsi, -0x10(%rbp)
    00000001000012c0    movq    -0x8(%rbp), %rsi
    00000001000012c4    movq    %rsi, %rdi
    00000001000012c7    addq    $0x28, %rdi
    00000001000012cb    movq    -0x10(%rbp), %rax
    00000001000012cf    movq    %rax, %rcx
    00000001000012d2    addq    $0x28, %rcx
    00000001000012d6    movq    0x28(%rax), %rax
    00000001000012da    movq    $0x0, 0x28(%rsi)
    00000001000012e2    movq    %rax, %rsi
    00000001000012e5    movq    %rcx, -0x18(%rbp)
    00000001000012e9    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000012ee    xorl    %edx, %edx
    00000001000012f0    movl    %edx, %esi
    00000001000012f2    movq    -0x18(%rbp), %rax
    00000001000012f6    movq    %rax, %rdi
    00000001000012f9    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000012fe    addq    $0x20, %rsp
    0000000100001302    popq    %rbp
    0000000100001303    retq
    0000000100001304    nopw    %cs:(%rax,%rax)
    ___Block_byref_object_dispose_:
    0000000100001310    pushq   %rbp
    0000000100001311    movq    %rsp, %rbp
    0000000100001314    subq    $0x10, %rsp
    0000000100001318    xorl    %eax, %eax
    000000010000131a    movl    %eax, %esi
    000000010000131c    movq    %rdi, -0x8(%rbp)
    0000000100001320    movq    -0x8(%rbp), %rdi
    0000000100001324    addq    $0x28, %rdi
    0000000100001328    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000132d    addq    $0x10, %rsp
    0000000100001331    popq    %rbp
    0000000100001332    retq
    0000000100001333    nopw    %cs:(%rax,%rax)
    ___47-[SampleObject getSomeResultWithString:number:]_block_invoke:
    0000000100001340    pushq   %rbp
    0000000100001341    movq    %rsp, %rbp
    0000000100001344    pushq   %rbx
    0000000100001345    subq    $0x68, %rsp
    0000000100001349    movq    %rdi, -0x10(%rbp)
    000000010000134d    movq    %rdi, %rax
    0000000100001350    movq    %rdi, -0x18(%rbp)
    0000000100001354    movq    0x2c85(%rip), %rcx ## Objc class ref: _OBJC_CLASS_$_NSString
    000000010000135b    movq    _cntstr(%rip), %rdx
    0000000100001362    movq    0x20(%rdi), %r8
    0000000100001366    movq    0x30(%rdi), %r9
    000000010000136a    movq    0x2c37(%rip), %rsi ## Objc selector ref: stringWithFormat:
    0000000100001371    leaq    0x1db8(%rip), %rdi ## Objc cfstring ref: @"%@:%@:%lul"
    0000000100001378    movq    0x1ca9(%rip), %r10 ## Objc message: +[NSString stringWithFormat:]
    000000010000137f    xorl    %r11d, %r11d
    0000000100001382    movb    %r11b, %bl
    0000000100001385    movq    %rdi, -0x38(%rbp)
    0000000100001389    movq    %rcx, %rdi
    000000010000138c    movq    -0x38(%rbp), %rcx
    0000000100001390    movq    %rdx, -0x40(%rbp)
    0000000100001394    movq    %rcx, %rdx
    0000000100001397    movq    -0x40(%rbp), %rcx
    000000010000139b    movq    %rax, -0x48(%rbp)
    000000010000139f    movb    %bl, %al
    00000001000013a1    movb    %bl, -0x49(%rbp)
    00000001000013a4    callq   *%r10
    00000001000013a7    movq    %rax, %rdi
    00000001000013aa    callq   0x100001834 ## symbol stub for: _objc_retainAutoreleasedReturnValue
    00000001000013af    movq    %rax, -0x20(%rbp)
    00000001000013b3    leaq    0x1d96(%rip), %rdi ## Objc cfstring ref: @"composite string:%@,succeeded"
    00000001000013ba    movq    %rax, %rsi
    00000001000013bd    movb    -0x49(%rbp), %al
    00000001000013c0    callq   0x1000017da ## symbol stub for: _NSLog
    00000001000013c5    jmp 0x1000013ca
    00000001000013ca    movq    -0x20(%rbp), %rdi
    00000001000013ce    callq   0x100001828 ## symbol stub for: _objc_retainAutorelease
    00000001000013d3    movq    0x2bd6(%rip), %rsi ## Objc selector ref: UTF8String
    00000001000013da    movq    0x1c47(%rip), %rdi ## Objc message: -[%rdi UTF8String]
    00000001000013e1    movq    %rdi, -0x58(%rbp)
    00000001000013e5    movq    %rax, %rdi
    00000001000013e8    movq    -0x58(%rbp), %rax
    00000001000013ec    callq   *%rax
    00000001000013ee    movq    %rax, -0x60(%rbp)
    00000001000013f2    jmp 0x1000013f7
    00000001000013f7    movq    -0x60(%rbp), %rdi
    00000001000013fb    callq   0x100001840 ## symbol stub for: _puts
    0000000100001400    movl    %eax, -0x64(%rbp)
    0000000100001403    jmp 0x100001408
    0000000100001408    movq    -0x20(%rbp), %rax
    000000010000140c    movq    -0x48(%rbp), %rcx
    0000000100001410    movq    0x28(%rcx), %rdx
    0000000100001414    movq    0x8(%rdx), %rdx
    0000000100001418    addq    $0x28, %rdx
    000000010000141c    movq    %rdx, %rdi
    000000010000141f    movq    %rax, %rsi
    0000000100001422    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001427    xorl    %r8d, %r8d
    000000010000142a    movl    %r8d, %esi
    000000010000142d    leaq    -0x20(%rbp), %rax
    0000000100001431    movq    %rax, %rdi
    0000000100001434    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001439    addq    $0x68, %rsp
    000000010000143d    popq    %rbx
    000000010000143e    popq    %rbp
    000000010000143f    retq
    0000000100001440    xorl    %ecx, %ecx
    0000000100001442    movl    %ecx, %esi
    0000000100001444    leaq    -0x20(%rbp), %rdi
    0000000100001448    movl    %edx, %ecx
    000000010000144a    movq    %rax, -0x28(%rbp)
    000000010000144e    movl    %ecx, -0x2c(%rbp)
    0000000100001451    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001456    movq    -0x28(%rbp), %rdi
    000000010000145a    callq   0x1000017f8 ## symbol stub for: __Unwind_Resume
    000000010000145f    nop
    ___copy_helper_block_:
    0000000100001460    pushq   %rbp
    0000000100001461    movq    %rsp, %rbp
    0000000100001464    subq    $0x20, %rsp
    0000000100001468    movq    %rdi, -0x8(%rbp)
    000000010000146c    movq    %rsi, -0x10(%rbp)
    0000000100001470    movq    -0x10(%rbp), %rsi
    0000000100001474    movq    -0x8(%rbp), %rdi
    0000000100001478    movq    %rdi, %rax
    000000010000147b    movq    %rax, %rcx
    000000010000147e    addq    $0x20, %rcx
    0000000100001482    movq    0x20(%rsi), %rdx
    0000000100001486    movq    $0x0, 0x20(%rdi)
    000000010000148e    movq    %rcx, %rdi
    0000000100001491    movq    %rsi, -0x18(%rbp)
    0000000100001495    movq    %rdx, %rsi
    0000000100001498    movq    %rax, -0x20(%rbp)
    000000010000149c    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000014a1    movl    $0x8, %edx
    00000001000014a6    movq    -0x20(%rbp), %rax
    00000001000014aa    addq    $0x28, %rax
    00000001000014ae    movq    -0x18(%rbp), %rcx
    00000001000014b2    movq    0x28(%rcx), %rsi
    00000001000014b6    movq    %rax, %rdi
    00000001000014b9    callq   0x1000017ec ## symbol stub for: __Block_object_assign
    00000001000014be    addq    $0x20, %rsp
    00000001000014c2    popq    %rbp
    00000001000014c3    retq
    00000001000014c4    nopw    %cs:(%rax,%rax)
    ___destroy_helper_block_:
    00000001000014d0    pushq   %rbp
    00000001000014d1    movq    %rsp, %rbp
    00000001000014d4    subq    $0x10, %rsp
    00000001000014d8    xorl    %eax, %eax
    00000001000014da    movl    %eax, %esi
    00000001000014dc    movq    %rdi, -0x8(%rbp)
    00000001000014e0    movq    -0x8(%rbp), %rdi
    00000001000014e4    movq    %rdi, %rcx
    00000001000014e7    addq    $0x20, %rcx
    00000001000014eb    movq    %rdi, -0x10(%rbp)
    00000001000014ef    movq    %rcx, %rdi
    00000001000014f2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000014f7    movl    $0x8, %esi
    00000001000014fc    movq    -0x10(%rbp), %rcx
    0000000100001500    movq    0x28(%rcx), %rdi
    0000000100001504    callq   0x1000017f2 ## symbol stub for: __Block_object_dispose
    0000000100001509    addq    $0x10, %rsp
    000000010000150d    popq    %rbp
    000000010000150e    retq
    000000010000150f    nop
    -[SampleObject propertyObj]:
    0000000100001510    pushq   %rbp
    0000000100001511    movq    %rsp, %rbp
    0000000100001514    movq    %rdi, -0x8(%rbp)
    0000000100001518    movq    %rsi, -0x10(%rbp)
    000000010000151c    movq    -0x8(%rbp), %rsi
    0000000100001520    movq    _OBJC_IVAR_$_SampleObject._propertyObj(%rip), %rdi
    0000000100001527    movq    (%rsi,%rdi), %rax
    000000010000152b    popq    %rbp
    000000010000152c    retq
    000000010000152d    nopl    (%rax)
    -[SampleObject setPropertyObj:]:
    0000000100001530    pushq   %rbp
    0000000100001531    movq    %rsp, %rbp
    0000000100001534    subq    $0x20, %rsp
    0000000100001538    movq    %rdi, -0x8(%rbp)
    000000010000153c    movq    %rsi, -0x10(%rbp)
    0000000100001540    movq    %rdx, -0x18(%rbp)
    0000000100001544    movq    -0x18(%rbp), %rdx
    0000000100001548    movq    -0x8(%rbp), %rsi
    000000010000154c    movq    _OBJC_IVAR_$_SampleObject._propertyObj(%rip), %rdi
    0000000100001553    addq    %rdi, %rsi
    0000000100001556    movq    %rsi, %rdi
    0000000100001559    movq    %rdx, %rsi
    000000010000155c    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001561    addq    $0x20, %rsp
    0000000100001565    popq    %rbp
    0000000100001566    retq
    0000000100001567    nopw    (%rax,%rax)
    -[SampleObject sampleName]:
    0000000100001570    pushq   %rbp
    0000000100001571    movq    %rsp, %rbp
    0000000100001574    movq    %rdi, -0x8(%rbp)
    0000000100001578    movq    %rsi, -0x10(%rbp)
    000000010000157c    movq    -0x8(%rbp), %rsi
    0000000100001580    movq    _OBJC_IVAR_$_SampleObject._sampleName(%rip), %rdi
    0000000100001587    movq    (%rsi,%rdi), %rax
    000000010000158b    popq    %rbp
    000000010000158c    retq
    000000010000158d    nopl    (%rax)
    -[SampleObject setSampleName:]:
    0000000100001590    pushq   %rbp
    0000000100001591    movq    %rsp, %rbp
    0000000100001594    subq    $0x20, %rsp
    0000000100001598    movq    %rdi, -0x8(%rbp)
    000000010000159c    movq    %rsi, -0x10(%rbp)
    00000001000015a0    movq    %rdx, -0x18(%rbp)
    00000001000015a4    movq    -0x18(%rbp), %rdx
    00000001000015a8    movq    -0x8(%rbp), %rsi
    00000001000015ac    movq    _OBJC_IVAR_$_SampleObject._sampleName(%rip), %rdi
    00000001000015b3    addq    %rdi, %rsi
    00000001000015b6    movq    %rsi, %rdi
    00000001000015b9    movq    %rdx, %rsi
    00000001000015bc    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000015c1    addq    $0x20, %rsp
    00000001000015c5    popq    %rbp
    00000001000015c6    retq
    00000001000015c7    nopw    (%rax,%rax)
    -[SampleObject sampleId]:
    00000001000015d0    pushq   %rbp
    00000001000015d1    movq    %rsp, %rbp
    00000001000015d4    movq    %rdi, -0x8(%rbp)
    00000001000015d8    movq    %rsi, -0x10(%rbp)
    00000001000015dc    movq    -0x8(%rbp), %rsi
    00000001000015e0    movq    _OBJC_IVAR_$_SampleObject._sampleId(%rip), %rdi
    00000001000015e7    movq    (%rsi,%rdi), %rax
    00000001000015eb    popq    %rbp
    00000001000015ec    retq
    00000001000015ed    nopl    (%rax)
    -[SampleObject setSampleId:]:
    00000001000015f0    pushq   %rbp
    00000001000015f1    movq    %rsp, %rbp
    00000001000015f4    movq    %rdi, -0x8(%rbp)
    00000001000015f8    movq    %rsi, -0x10(%rbp)
    00000001000015fc    movq    %rdx, -0x18(%rbp)
    0000000100001600    movq    -0x18(%rbp), %rdx
    0000000100001604    movq    -0x8(%rbp), %rsi
    0000000100001608    movq    _OBJC_IVAR_$_SampleObject._sampleId(%rip), %rdi
    000000010000160f    movq    %rdx, (%rsi,%rdi)
    0000000100001613    popq    %rbp
    0000000100001614    retq
    0000000100001615    nopw    %cs:(%rax,%rax)
    -[SampleObject .cxx_destruct]:
    0000000100001620    pushq   %rbp
    0000000100001621    movq    %rsp, %rbp
    0000000100001624    subq    $0x20, %rsp
    0000000100001628    xorl    %eax, %eax
    000000010000162a    movl    %eax, %ecx
    000000010000162c    movq    %rdi, -0x8(%rbp)
    0000000100001630    movq    %rsi, -0x10(%rbp)
    0000000100001634    movq    -0x8(%rbp), %rsi
    0000000100001638    movq    _OBJC_IVAR_$_SampleObject._sampleName(%rip), %rdi
    000000010000163f    movq    %rsi, %rdx
    0000000100001642    addq    %rdi, %rdx
    0000000100001645    movq    %rdx, %rdi
    0000000100001648    movq    %rsi, -0x18(%rbp)
    000000010000164c    movq    %rcx, %rsi
    000000010000164f    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    0000000100001654    xorl    %eax, %eax
    0000000100001656    movl    %eax, %esi
    0000000100001658    movq    _OBJC_IVAR_$_SampleObject._propertyObj(%rip), %rcx
    000000010000165f    movq    -0x18(%rbp), %rdx
    0000000100001663    addq    %rcx, %rdx
    0000000100001666    movq    %rdx, %rdi
    0000000100001669    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    000000010000166e    addq    $0x20, %rsp
    0000000100001672    popq    %rbp
    0000000100001673    retq
    0000000100001674    nop
    0000000100001675    nop
    0000000100001676    nop
    0000000100001677    nop
    0000000100001678    nop
    0000000100001679    nop
    000000010000167a    nop
    000000010000167b    nop
    000000010000167c    nop
    000000010000167d    nop
    000000010000167e    nop
    000000010000167f    nop
    _main:
    0000000100001680    pushq   %rbp
    0000000100001681    movq    %rsp, %rbp
    0000000100001684    subq    $0x60, %rsp
    0000000100001688    movl    $0x0, -0x4(%rbp)
    000000010000168f    movl    %edi, -0x8(%rbp)
    0000000100001692    movq    %rsi, -0x10(%rbp)
    0000000100001696    callq   0x10000180a ## symbol stub for: _objc_autoreleasePoolPush
    000000010000169b    movq    0x2946(%rip), %rsi ## Objc class ref: SampleObject
    00000001000016a2    movq    0x290f(%rip), %rcx ## Objc selector ref: new
    00000001000016a9    movq    %rsi, %rdi
    00000001000016ac    movq    %rcx, %rsi
    00000001000016af    movq    %rax, -0x20(%rbp)
    00000001000016b3    callq   0x100001810 ## Objc message: +[SampleObject new]
    00000001000016b8    movq    %rax, -0x18(%rbp)
    00000001000016bc    movq    -0x18(%rbp), %rax
    00000001000016c0    movq    0x2929(%rip), %rcx ## Objc class ref: _OBJC_CLASS_$_NSObject
    00000001000016c7    movq    0x28ea(%rip), %rsi ## Objc selector ref: new
    00000001000016ce    movq    %rcx, %rdi
    00000001000016d1    movq    %rax, -0x28(%rbp)
    00000001000016d5    callq   0x100001810 ## Objc message: +[NSObject new]
    00000001000016da    movq    0x28df(%rip), %rsi ## Objc selector ref: setPropertyObj:
    00000001000016e1    movq    -0x28(%rbp), %rcx
    00000001000016e5    movq    %rcx, %rdi
    00000001000016e8    movq    %rax, %rdx
    00000001000016eb    movq    %rax, -0x30(%rbp)
    00000001000016ef    callq   0x100001810 ## Objc message: -[%rdi setPropertyObj:]
    00000001000016f4    movq    -0x30(%rbp), %rax
    00000001000016f8    movq    %rax, %rdi
    00000001000016fb    callq   0x10000181c ## symbol stub for: _objc_release
    0000000100001700    movl    $0x2, %edx
    0000000100001705    movq    -0x18(%rbp), %rax
    0000000100001709    movq    0x28e8(%rip), %rcx ## Objc class ref: _OBJC_CLASS_$_NSNumber
    0000000100001710    movq    0x28b1(%rip), %rsi ## Objc selector ref: numberWithInt:
    0000000100001717    movq    %rcx, %rdi
    000000010000171a    movq    %rax, -0x38(%rbp)
    000000010000171e    callq   0x100001810 ## Objc message: +[NSNumber numberWithInt:]
    0000000100001723    movq    %rax, %rdi
    0000000100001726    callq   0x100001834 ## symbol stub for: _objc_retainAutoreleasedReturnValue
    000000010000172b    leaq    0x1a3e(%rip), %rcx ## Objc cfstring ref: @"ab"
    0000000100001732    movq    0x2897(%rip), %rsi ## Objc selector ref: getSomeResultWithString:number:
    0000000100001739    movq    -0x38(%rbp), %rdi
    000000010000173d    movq    %rcx, %rdx
    0000000100001740    movq    %rax, %rcx
    0000000100001743    movq    %rax, -0x40(%rbp)
    0000000100001747    callq   0x100001810 ## Objc message: -[%rdi getSomeResultWithString:number:]
    000000010000174c    movq    -0x40(%rbp), %rax
    0000000100001750    movq    %rax, %rdi
    0000000100001753    callq   0x10000181c ## symbol stub for: _objc_release
    0000000100001758    movl    -0x8(%rbp), %edi
    000000010000175b    movq    -0x10(%rbp), %rsi
    000000010000175f    movq    0x289a(%rip), %rax ## Objc class ref: AppDelegate
    0000000100001766    movq    0x286b(%rip), %rcx ## Objc selector ref: class
    000000010000176d    movl    %edi, -0x44(%rbp)
    0000000100001770    movq    %rax, %rdi
    0000000100001773    movq    %rsi, -0x50(%rbp)
    0000000100001777    movq    %rcx, %rsi
    000000010000177a    callq   0x100001810 ## Objc message: +[AppDelegate class]
    000000010000177f    movq    %rax, %rdi
    0000000100001782    callq   0x1000017e0 ## symbol stub for: _NSStringFromClass
    0000000100001787    movq    %rax, %rdi
    000000010000178a    callq   0x100001834 ## symbol stub for: _objc_retainAutoreleasedReturnValue
    000000010000178f    xorl    %r8d, %r8d
    0000000100001792    movl    %r8d, %edx
    0000000100001795    movl    -0x44(%rbp), %edi
    0000000100001798    movq    -0x50(%rbp), %rsi
    000000010000179c    movq    %rax, %rcx
    000000010000179f    movq    %rax, -0x58(%rbp)
    00000001000017a3    callq   0x1000017e6 ## symbol stub for: _UIApplicationMain
    00000001000017a8    movl    %eax, -0x4(%rbp)
    00000001000017ab    movq    -0x58(%rbp), %rcx
    00000001000017af    movq    %rcx, %rdi
    00000001000017b2    callq   0x10000181c ## symbol stub for: _objc_release
    00000001000017b7    xorl    %eax, %eax
    00000001000017b9    movl    %eax, %esi
    00000001000017bb    leaq    -0x18(%rbp), %rcx
    00000001000017bf    movq    %rcx, %rdi
    00000001000017c2    callq   0x10000183a ## symbol stub for: _objc_storeStrong
    00000001000017c7    movq    -0x20(%rbp), %rdi
    00000001000017cb    callq   0x100001804 ## symbol stub for: _objc_autoreleasePoolPop
    00000001000017d0    movl    -0x4(%rbp), %eax
    00000001000017d3    addq    $0x60, %rsp
    00000001000017d7    popq    %rbp
    00000001000017d8    retq
    
    

    Mach-O文件中方便DYLD进行链接和绑定符号的段为__LINKEDIT段,使用otool -lv可以查看

    //略去了前面的TEXT和DATA段
    Load command 3
          cmd LC_SEGMENT_64
      cmdsize 72
      segname __LINKEDIT
       vmaddr 0x0000000100005000
       vmsize 0x0000000000005000
      fileoff 20480
     filesize 19136
      maxprot rwx
      initprot r--
       nsects 0
        flags (none)
    Load command 4
                cmd LC_DYLD_INFO_ONLY
            cmdsize 48
         rebase_off 20480
        rebase_size 232
           bind_off 20712
          bind_size 528
      weak_bind_off 0
     weak_bind_size 0
      lazy_bind_off 21240
     lazy_bind_size 472
         export_off 21712
        export_size 224
    Load command 5
         cmd LC_SYMTAB
     cmdsize 24
      symoff 21968
       nsyms 205
      stroff 25416
     strsize 4400
    Load command 6
                cmd LC_DYSYMTAB
            cmdsize 80
          ilocalsym 0
          nlocalsym 164
         iextdefsym 164
         nextdefsym 9
          iundefsym 173
          nundefsym 32
             tocoff 0
               ntoc 0
          modtaboff 0
            nmodtab 0
       extrefsymoff 0
        nextrefsyms 0
     indirectsymoff 25248
      nindirectsyms 42
          extreloff 0
            nextrel 0
          locreloff 0
            nlocrel 0
    Load command 7
              cmd LC_LOAD_DYLINKER
          cmdsize 32
             name /usr/lib/dyld (offset 12)
    Load command 8
         cmd LC_UUID
     cmdsize 24
        uuid 35B44905-3939-3540-92C8-9B1204DA2B6A
    Load command 9
          cmd LC_VERSION_MIN_IPHONEOS
      cmdsize 16
      version 10.3
          sdk 10.3
    Load command 10
          cmd LC_SOURCE_VERSION
      cmdsize 16
      version 0.0
    Load command 11
           cmd LC_MAIN
       cmdsize 24
      entryoff 5760
     stacksize 0
    Load command 12
              cmd LC_LOAD_DYLIB
          cmdsize 88
             name /System/Library/Frameworks/Foundation.framework/Foundation (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 1349.55.0
    compatibility version 300.0.0
    Load command 13
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libobjc.A.dylib (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 228.0.0
    compatibility version 1.0.0
    Load command 14
              cmd LC_LOAD_DYLIB
          cmdsize 48
             name /usr/lib/libc++.1.dylib (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 307.5.0
    compatibility version 1.0.0
    Load command 15
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libSystem.dylib (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 1238.50.2
    compatibility version 1.0.0
    Load command 16
              cmd LC_LOAD_DYLIB
          cmdsize 96
             name /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 1349.56.0
    compatibility version 150.0.0
    Load command 17
              cmd LC_LOAD_DYLIB
          cmdsize 80
             name /System/Library/Frameworks/UIKit.framework/UIKit (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 3600.7.47
    compatibility version 1.0.0
    Load command 18
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libc++abi.dylib (offset 24)
       time stamp 2 Thu Jan  1 08:00:02 1970
          current version 307.2.0
    compatibility version 1.0.0
    Load command 19
              cmd LC_RPATH
          cmdsize 40
             path @executable_path/Frameworks (offset 12)
    Load command 20
          cmd LC_FUNCTION_STARTS
      cmdsize 16
      dataoff 21936
     datasize 32
    Load command 21
          cmd LC_DATA_IN_CODE
      cmdsize 16
      dataoff 21968
     datasize 0
    Load command 22
          cmd LC_CODE_SIGNATURE
      cmdsize 16
      dataoff 29824
     datasize 9792
    

    关于Mach-O文件被dyld加载进内存涉及的数据结构,可以参考mach-o/loader.h中mach_header , segment_command的注释
    对整个dyld加载及linkmap中各段涵义的解释会在篇二中进行

    相关文章

      网友评论

        本文标题:LinkMap篇 (一)

        本文链接:https://www.haomeiwen.com/subject/okohdxtx.html