Last active
August 7, 2020 17:21
-
-
Save zac/dc581ac241bc882c8fde97bdae6ccc17 to your computer and use it in GitHub Desktop.
-[NSCalendarDate descriptionWithCalendarFormat:locale:] Disassembly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* @class NSCalendarDate */ | |
-(void *)descriptionWithCalendarFormat:(void *)arg2 locale:(void *)arg3 { | |
var_E8 = arg3; | |
var_118 = self; | |
var_C0 = [[objc_allocWithZone(@class(NSMutableString), _cmd, arg2, arg3) init] autorelease]; | |
var_108 = arg2; | |
r13 = [arg2 length]; | |
var_1E8 = [NSCharacterSet decimalDigitCharacterSet]; | |
if (r13 == 0x0) goto loc_17d89; | |
loc_16ff4: | |
rbx = 0x0; | |
var_D8 = r13; | |
goto loc_1720d; | |
loc_1720d: | |
rax = [var_108 rangeOfString:@"%" options:0x0 range:rbx, r13 - rbx]; | |
if (@"%" == 0x0) { | |
rax = r13; | |
} | |
r15 = rax - rbx; | |
if (r15 > 0x0) { | |
var_C8 = rax; | |
r14 = [var_C0 length]; | |
[var_108 substringWithRange:rbx]; | |
r13 = var_D8; | |
[var_C0 replaceCharactersInRange:r14 withString:0x0]; | |
rax = var_C8; | |
} | |
rax = rax + @"%"; | |
if (@"%" == 0x0) goto loc_17d7d; | |
loc_172b0: | |
if (rax >= r13) goto loc_172f6; | |
loc_172b5: | |
r15 = rax; | |
r12 = rax; | |
goto loc_172c2; | |
loc_172c2: | |
if ([var_1E8 characterIsMember:[var_108 characterAtIndex:r12] & 0xffff] == 0x0) goto loc_17302; | |
loc_172ea: | |
r12 = r12 + 0x1; | |
if (r12 < r13) goto loc_172c2; | |
loc_172f2: | |
rbx = 0x0; | |
goto loc_17304; | |
loc_17304: | |
rcx = r12 - r15; | |
if (rcx > 0x0) { | |
rax = __snprintf_chk(&var_B0, 0x80, 0x0, 0x80, "%%%sd", [[var_108 substringWithRange:r15] UTF8String]); | |
} | |
else { | |
var_B0 = 0x0; | |
} | |
if (rbx == 0x0) goto loc_17428; | |
loc_17365: | |
var_C8 = r12 + 0x1; | |
rdx = r12; | |
rax = [var_108 characterAtIndex:rdx]; | |
rcx = rax - 0x41; | |
if (rcx > 0x2c) goto loc_17430; | |
loc_17392: | |
rbx = var_118; | |
goto *0x17db8[sign_extend_64(*(int32_t *)(switch_table + (rcx & 0xffff) * 0x4)) + switch_table]; | |
loc_173ac: | |
r12 = [rbx dayOfWeek]; | |
r14 = [var_E8 objectForKey:*_NSWeekDayNameArray]; | |
rsp = rsp - 0x18; | |
rbx = @"Thursday"; | |
goto loc_178cf; | |
loc_178cf: | |
rax = (*_objc_msgSend)(@class(NSArray), @selector(arrayWithObjects:)); | |
rsp = (rsp - 0x8) + 0x20; | |
goto loc_1798e; | |
loc_1798e: | |
rbx = rax; | |
if (r14 != 0x0) { | |
rbx = r14; | |
} | |
r13 = var_C0; | |
r14 = [r13 length]; | |
rax = [rbx objectAtIndex:r12]; | |
goto loc_17b30; | |
loc_17b30: | |
rdi = r13; | |
r13 = var_D8; | |
rdx = r14; | |
r8 = rax; | |
goto loc_17b50; | |
loc_17b50: | |
_objc_msgSend_3059d0(rdi, @selector(replaceCharactersInRange:withString:), rdx, 0x0, r8); | |
goto loc_17d76; | |
loc_17d76: | |
rax = var_C8; | |
goto loc_17d7d; | |
loc_17d7d: | |
rbx = rax; | |
if (r13 > rax) goto loc_1720d; | |
loc_17d89: | |
if (**___stack_chk_guard == **___stack_chk_guard) { | |
rax = var_C0; | |
} | |
else { | |
rax = __stack_chk_fail(); | |
} | |
return rax; | |
loc_17516: | |
r12 = [rbx monthOfYear] - 0x1; | |
r14 = [var_E8 objectForKey:*_NSMonthNameArray]; | |
rsp = rsp - 0x40; | |
rbx = @"June"; | |
goto loc_1797b; | |
loc_1797b: | |
rax = (*_objc_msgSend)(@class(NSArray), @selector(arrayWithObjects:)); | |
rsp = (rsp - 0x10) + 0x50; | |
goto loc_1798e; | |
loc_174e7: | |
rax = [var_C0 length]; | |
rdi = var_C0; | |
rdx = rax; | |
r8 = @"?"; | |
goto loc_17b50; | |
loc_175b7: | |
[rbx timeIntervalSinceReferenceDate]; | |
var_F0 = intrinsic_movsd(var_F0, xmm0); | |
[rbx timeIntervalSinceReferenceDate]; | |
floor(xmm0); | |
xmm1 = intrinsic_movsd(xmm1, var_F0); | |
xmm1 = intrinsic_subsd(xmm1, xmm0); | |
xmm1 = intrinsic_mulsd(xmm1, *double_value_1000); | |
xmm0 = intrinsic_movapd(xmm0, xmm1); | |
floor(xmm0); | |
rcx = intrinsic_cvttsd2si(switch_table, xmm0); | |
var_B6 = (HIQWORD((rcx - ((SAR(HIQWORD(rcx * 0x20c49ba5e353f7cf), 0x7)) + (HIQWORD(rcx * 0x20c49ba5e353f7cf) >> 0x3f)) * 0x3e8) * 0xa3d70a3d70a3d70b) + (rcx - ((SAR(HIQWORD(rcx * 0x20c49ba5e353f7cf), 0x7)) + (HIQWORD(rcx * 0x20c49ba5e353f7cf) >> 0x3f)) * 0x3e8) >> 0x6) + (HIQWORD((rcx - ((SAR(HIQWORD(rcx * 0x20c49ba5e353f7cf), 0x7)) + (HIQWORD(rcx * 0x20c49ba5e353f7cf) >> 0x3f)) * 0x3e8) * 0xa3d70a3d70a3d70b) + (rcx - ((SAR(HIQWORD(rcx * 0x20c49ba5e353f7cf), 0x7)) + (HIQWORD(rcx * 0x20c49ba5e353f7cf) >> 0x3f)) * 0x3e8) >> 0x3f) + 0x30; | |
[var_C0 replaceCharactersInRange:[var_C0 length] withCharacters:0x0 length:&var_B6, 0x3]; | |
goto loc_17d76; | |
loc_176f5: | |
rdi = rbx; | |
rsi = @selector(hourOfDay); | |
goto loc_17a8a; | |
loc_17a8a: | |
rax = _objc_msgSend_3059d0(rdi, rsi); | |
rdi = var_C0; | |
rsi = rax; | |
goto loc_17a97; | |
loc_17a97: | |
rdx = &var_B0; | |
rcx = "%02ld"; | |
goto loc_17d71; | |
loc_17d71: | |
_appendNumber(rdi, rsi, rdx, rcx); | |
goto loc_17d76; | |
loc_17704: | |
rax = [rbx hourOfDay]; | |
rsi = rax - ((HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x1) + (HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x3f) << 0x2) + ((HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x1) + (HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x3f) << 0x2) * 0x2; | |
if (rsi == 0x0) { | |
rsi = 0xc; | |
} | |
goto loc_17a4d; | |
loc_17a4d: | |
rdi = var_C0; | |
goto loc_17a97; | |
loc_17747: | |
rdi = rbx; | |
rsi = @selector(minuteOfHour); | |
goto loc_17a8a; | |
loc_17756: | |
rdi = rbx; | |
rsi = @selector(secondOfMinute); | |
goto loc_17a8a; | |
loc_17765: | |
r15 = var_E8; | |
rax = [r15 objectForKey:*_NSTimeDateFormatString]; | |
r12 = rbx; | |
rbx = rax; | |
TEST(rax & rax); | |
rax = @"%H:%M:%S %Z"; | |
goto loc_17aff; | |
loc_17aff: | |
if (CPU_FLAGS & E) { | |
rbx = rax; | |
} | |
r13 = var_C0; | |
r14 = [r13 length]; | |
rax = (*_objc_msgSend)(r12, @selector(descriptionWithCalendarFormat:locale:)); | |
goto loc_17b30; | |
loc_17795: | |
r12 = _objc_msgSend_3059d0(rbx, @selector(yearOfCommonEra)); | |
rax = [var_E8 objectForKey:@"AppleLocale"]; | |
if (rax == 0x0) goto loc_17805; | |
loc_177c2: | |
rbx = rax; | |
r15 = @selector(isEqualToString:); | |
if (_objc_msgSend_3059d0(rax, r15, @"ja_JP_TRADITIONAL") != 0x0) goto loc_17bae; | |
loc_177e7: | |
rax = _objc_msgSend_3059d0(rbx, r15, @"th_TH_TRADITIONAL"); | |
rcx = r12 + 0x21f; | |
if (rax != 0x0) { | |
r12 = rcx; | |
} | |
goto loc_17805; | |
loc_17805: | |
rdi = var_C0; | |
rsi = r12; | |
goto loc_17ac1; | |
loc_17ac1: | |
rdx = &var_B0; | |
rcx = "%ld"; | |
goto loc_17d71; | |
loc_17bae: | |
var_148 = **_kCFAllocatorDefault; | |
rax = CFLocaleCreate(0x0, @"ja_JP_TRADITIONAL"); | |
var_F0 = rax; | |
CFDateFormatterSetFormat(CFDateFormatterCreate(var_148, rax, 0x0, 0x0), @"Gy"); | |
[var_118 timeIntervalSinceReferenceDate]; | |
r13 = CFDateFormatterCreateStringWithAbsoluteTime(var_148, rax, 0x0); | |
[var_C0 replaceCharactersInRange:[var_C0 length] withString:0x0, r13]; | |
CFRelease(var_F0); | |
CFRelease(rax); | |
rdi = r13; | |
r13 = var_D8; | |
CFRelease(rdi); | |
goto loc_17d76; | |
loc_17814: | |
rax = _objc_msgSend_3059d0(rbx, @selector(timeZone)); | |
rax = [rax name]; | |
if (rax == 0x0) { | |
rax = @""; | |
} | |
[var_C0 appendString:rax]; | |
goto loc_17d76; | |
loc_17858: | |
r12 = [rbx dayOfWeek]; | |
r14 = [var_E8 objectForKey:*_NSShortWeekDayNameArray]; | |
rsp = rsp - 0x18; | |
rbx = @"Thu"; | |
goto loc_178cf; | |
loc_178df: | |
r12 = [rbx monthOfYear] - 0x1; | |
r14 = [var_E8 objectForKey:*_NSShortMonthNameArray]; | |
rsp = rsp - 0x40; | |
rbx = @"Jun"; | |
goto loc_1797b; | |
loc_179ca: | |
r15 = var_E8; | |
rax = [r15 objectForKey:*_NSTimeDateFormatString]; | |
r12 = rbx; | |
rbx = rax; | |
TEST(rax & rax); | |
rax = @"%a %b %d %H:%M:%S %Z %Y"; | |
goto loc_17aff; | |
loc_179fa: | |
rdi = rbx; | |
rsi = @selector(dayOfMonth); | |
goto loc_17a8a; | |
loc_17a09: | |
rdi = rbx; | |
rsi = @selector(dayOfMonth); | |
goto loc_17ab4; | |
loc_17ab4: | |
rax = _objc_msgSend_3059d0(rdi, rsi); | |
rdi = var_C0; | |
rsi = rax; | |
goto loc_17ac1; | |
loc_17a18: | |
rax = [rbx hourOfDay]; | |
rsi = rax - ((HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x1) + (HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x3f) << 0x2) + ((HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x1) + (HIQWORD(rax * 0x2aaaaaaaaaaaaaab) >> 0x3f) << 0x2) * 0x2; | |
goto loc_17a4d; | |
loc_17a56: | |
rax = [rbx dayOfYear]; | |
rdi = var_C0; | |
rsi = rax; | |
rdx = &var_B0; | |
rcx = "%03ld"; | |
goto loc_17d71; | |
loc_17a80: | |
rdi = rbx; | |
rsi = @selector(monthOfYear); | |
goto loc_17a8a; | |
loc_17430: | |
rcx = rax - 0x70; | |
rbx = var_118; | |
if (rcx > 0xa) goto loc_174b2; | |
loc_17440: | |
goto *0x17e6c[sign_extend_64(*(int32_t *)(switch_table + (rcx & 0xffff) * 0x4)) + switch_table]; | |
loc_17453: | |
r12 = [rbx hourOfDay] > 0xb ? 0x1 : 0x0; | |
r14 = [var_E8 objectForKey:*_NSAMPMDesignation]; | |
rax = [NSArray arrayWithObjects:@"AM"]; | |
goto loc_1798e; | |
loc_17aaa: | |
rdi = rbx; | |
rsi = @selector(dayOfWeek); | |
goto loc_17ab4; | |
loc_17ad4: | |
r15 = var_E8; | |
rax = [r15 objectForKey:*_NSTimeDateFormatString]; | |
r12 = rbx; | |
rbx = rax; | |
TEST(rax & rax); | |
rax = @"%a %b %d %Y"; | |
goto loc_17aff; | |
loc_17b58: | |
r12 = _objc_msgSend_3059d0(rbx, @selector(yearOfCommonEra)); | |
rax = [var_E8 objectForKey:@"AppleLocale"]; | |
if (rax == 0x0) goto loc_171d6; | |
loc_17b89: | |
rbx = rax; | |
r15 = @selector(isEqualToString:); | |
if (_objc_msgSend_3059d0(rax, r15, @"ja_JP_TRADITIONAL") == 0x0) goto loc_171b8; | |
goto loc_17bae; | |
loc_171b8: | |
rax = _objc_msgSend_3059d0(rbx, r15, @"th_TH_TRADITIONAL"); | |
rcx = r12 + 0x21f; | |
if (rax != 0x0) { | |
r12 = rcx; | |
} | |
goto loc_171d6; | |
loc_171d6: | |
rdi = var_C0; | |
rsi = r12 - ((SAR(HIQWORD(r12 * 0xa3d70a3d70a3d70b) + r12, 0x6)) + (HIQWORD(r12 * 0xa3d70a3d70a3d70b) + r12 >> 0x3f)) * 0x64; | |
goto loc_17a97; | |
loc_17c5b: | |
r12 = @selector(timeZone); | |
if (_objc_msgSend_3059d0(rbx, r12) != 0x0) { | |
rax = _objc_msgSend_3059d0(rbx, r12); | |
rdx = rbx; | |
rax = [rax secondsFromGMTForDate:rdx]; | |
rbx = rax; | |
if (rax < 0x0) { | |
rbx = -rbx; | |
r15 = var_C0; | |
rax = [r15 length]; | |
rdi = r15; | |
rdx = rax; | |
r8 = @"-"; | |
} | |
else { | |
r15 = var_C0; | |
rax = [r15 length]; | |
rdi = r15; | |
rdx = rax; | |
r8 = @"+"; | |
} | |
} | |
else { | |
rbx = 0x0; | |
r15 = var_C0; | |
rax = [r15 length]; | |
rdi = r15; | |
rdx = rax; | |
r8 = @"+"; | |
} | |
_objc_msgSend_3059d0(rdi, @selector(replaceCharactersInRange:withString:), rdx, 0x0, r8); | |
_appendNumber(r15, (SAR(HIQWORD(rbx * 0x48d159e26af37c05), 0xa)) + (HIQWORD(rbx * 0x48d159e26af37c05) >> 0x3f), "%02ld", "%02ld"); | |
rdi = r15; | |
rsi = (SAR(HIQWORD(rbx * 0x8888888888888889) + rbx, 0x5)) + (HIQWORD(rbx * 0x8888888888888889) + rbx >> 0x3f) - ((SAR(HIQWORD(((SAR(HIQWORD(rbx * 0x8888888888888889) + rbx, 0x5)) + (HIQWORD(rbx * 0x8888888888888889) + rbx >> 0x3f)) * 0x8888888888888889) + (SAR(HIQWORD(rbx * 0x8888888888888889) + rbx, 0x5)) + (HIQWORD(rbx * 0x8888888888888889) + rbx >> 0x3f), 0x5)) + (HIQWORD(((SAR(HIQWORD(rbx * 0x8888888888888889) + rbx, 0x5)) + (HIQWORD(rbx * 0x8888888888888889) + rbx >> 0x3f)) * 0x8888888888888889) + (SAR(HIQWORD(rbx * 0x8888888888888889) + rbx, 0x5)) + (HIQWORD(rbx * 0x8888888888888889) + rbx >> 0x3f) >> 0x3f)) * 0x3c; | |
rdx = "%02ld"; | |
rcx = "%02ld"; | |
goto loc_17d71; | |
loc_174b2: | |
if (rax == 0x25) { | |
rax = [var_C0 length]; | |
rdi = var_C0; | |
rdx = rax; | |
r8 = @"%"; | |
} | |
else { | |
rax = [var_C0 length]; | |
rdi = var_C0; | |
rdx = rax; | |
r8 = @"?"; | |
} | |
goto loc_17b50; | |
loc_17428: | |
rax = r12; | |
goto loc_17d7d; | |
loc_17302: | |
rbx = 0x1; | |
goto loc_17304; | |
loc_172f6: | |
var_B0 = 0x0; | |
goto loc_17d7d; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment