NSApplicationMain伪代码

int _NSApplicationMain(int argc, int argv) {
    _CFRunLoopSetPerCalloutAutoreleasepoolEnabled(0x1, argv);
    kdebug_trace(0x2bd80004, 0x0, 0x0, 0x0, 0x0);
    var_30 = NSPushAutoreleasePool(0x0);
    rbx = *___NSApplicationInfoDictionary;
    if (rbx == 0x0) {
            rbx = _objc_msgSend_7ff84021d210(_objc_msgSend_7ff84021d210(*0x7ff841b81fa0, *0x7ff841b48c00), *0x7ff841b4ae10);
    }
    r14 = _objc_msgSend_7ff84021d210(rbx, *0x7ff841b48d18);
    r12 = _objc_msgSend_7ff84021d210(rbx, *0x7ff841b48d18);
    var_38 = _objc_msgSend_7ff84021d210(rbx, *0x7ff841b48d18);
    r13 = _objc_msgSend_7ff84021d210(rbx, *0x7ff841b48d18);
    if (r14 == 0x0) {
            if (_CFExecutableLinkedOnOrAfter(0x10, *0x7ff841b48d18, 0x7ff84024ff28, 0x0, 0x0) == 0x0) {
                    r14 = 0x0;
            }
            else {
                    r14 = NSStringFromClass(objc_opt_class(*0x7ff841b825b0, *0x7ff841b48d18, 0x7ff84024ff28, 0x0, 0x0));
            }
    }
    entr_act_begin(0x3, 0x3, 0xffffffffffffffff, 0x0, 0x8000000000000000);
    if (r14 != 0x0) goto loc_7ff802d1fcf1;

loc_7ff802d1fce1:
    NSLog(0x7ff84024ffa8);
    goto loc_7ff802d1fd0f;

loc_7ff802d1fd0f:
    rbx = var_30;
    goto loc_7ff802d1fd13;

loc_7ff802d1fd13:
    [*_NSApp release];
    NSPopAutoreleasePool(rbx);
    rax = exit(0x1);
    return rax;

loc_7ff802d1fcf1:
    rax = NSClassFromString(r14);
    if (rax != 0x0) goto loc_7ff802d1fd35;

loc_7ff802d1fcfe:
    NSLog(0x7ff84024ff88);
    goto loc_7ff802d1fd0f;

loc_7ff802d1fd35:
    rbx = rax;
    _objc_msgSend_7ff84021d210(rbx, *0x7ff841b4c6b0);
    *(int8_t *)_sApplicationLaunchIsPastSplashScreens = 0x1;
    rdx = var_38;
    if (_objc_msgSend_7ff84021d210(*_NSApp, *0x7ff841b4d958, rdx) == 0x0) goto loc_7ff802d1fd99;

loc_7ff802d1fd7c:
    rax = (*_objc_msgSend)(*0x7ff841b826a0, *0x7ff841b4d960);
    if (rax != 0x0) goto loc_7ff802d1fe2a;

loc_7ff802d1fd99:
    rbx = var_30;
    if ((*_objc_msgSend)(*_NSApp, *0x7ff841b4d998) == 0x0) goto loc_7ff802d1febb;

loc_7ff802d1fdbf:
    kdebug_trace(0x2bd80035, 0x0, 0x0, 0x0, 0x0);
    r14 = (*_objc_msgSend)(*0x7ff841b81fa0, *0x7ff841b4d360);
    kdebug_trace(0x2bd80036, 0x0, 0x0, 0x0, 0x0);
    if (r14 != 0x0 || r12 == 0x0) goto loc_7ff802d1febb;

loc_7ff802d1fe14:
    NSLog(0x7ff84024ff68);
    goto loc_7ff802d1fd13;

loc_7ff802d1febb:
    NSPopAutoreleasePool(rbx);
    (*_objc_msgSend)(*_NSApp, *0x7ff841b4d9a0);
    [*_NSApp release];
    rax = exit(0x0);
    return rax;

loc_7ff802d1fe2a:
    r14 = rax;
    rax = NSClassFromString(r13);
    rax = objc_alloc_init(rax);
    r13 = rax;
    if (rax != 0x0) {
            rax = _objc_msgSend_7ff84021d210(rbx, *0x7ff841b4c6b0);
            rdx = r13;
            _objc_msgSend_7ff84021d210(rax, *0x7ff841b49d10, rdx);
    }
    _objc_msgSend_7ff84021d210(r14, *0x7ff841b4d968, _objc_msgSend_7ff84021d210(rbx, *0x7ff841b4c6b0, rdx));
    if (_objc_msgSend_7ff84021d210(r14, *0x7ff841b4d970, rdx) == 0x0) goto loc_7ff802d1fea7;

loc_7ff802d1fe8f:
    rax = (*_objc_msgSend)(r14, *0x7ff841b4d978);
    if (rax != 0x0) goto loc_7ff802d1ff01;

loc_7ff802d1fea7:
    r12 = 0x0;
    rbx = var_30;
    goto loc_7ff802d1feab;

loc_7ff802d1feab:
    [r12 retain];
    goto loc_7ff802d1febb;

loc_7ff802d1ff01:
    r14 = rax;
    if (objc_opt_isKindOfClass(r14, objc_opt_self(*0x7ff841b826a8)) != 0x0) goto loc_7ff802d1ff89;

loc_7ff802d1ff1f:
    if (objc_opt_isKindOfClass(r14, objc_opt_self(*0x7ff841b826b0)) != 0x0) goto loc_7ff802d1ffa1;

loc_7ff802d1ff3a:
    _objc_msgSend_7ff84021d210(*0x7ff841b820a8, *0x7ff841b49228, **_NSInternalInconsistencyException, 0x7ff84024ff48, objc_opt_class(r14), var_38);
    _objc_msgSend_7ff84021d210(0x0, *0x7ff841b4d988, 0x0);
    goto loc_7ff802d1fea7;

loc_7ff802d1ffa1:
    rax = _objc_msgSend_7ff84021d210(*0x7ff841b826a8, *0x7ff841b4d980, r14);
    r14 = rax;
    r12 = 0x0;
    _objc_msgSend_7ff84021d210(rax, *0x7ff841b4d988, 0x0);
    rbx = var_30;
    if (r14 == 0x0) goto loc_7ff802d1feab;

loc_7ff802d1ffd7:
    if (objc_opt_respondsToSelector(r13, *0x7ff841b4d990, 0x0, 0x0, 0x8000000000000000) != 0x0) goto loc_7ff802d1fff5;

loc_7ff802d1ffed:
    r12 = r14;
    goto loc_7ff802d1feab;

loc_7ff802d1fff5:
    (*_objc_msgSend)(r13, *0x7ff841b4d990);
    goto loc_7ff802d1febb;

loc_7ff802d1ff89:
    (*_objc_msgSend)(r14, *0x7ff841b4d988);
    rbx = var_30;
    goto loc_7ff802d1ffd7;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容