Skip to content

Instantly share code, notes, and snippets.

@zac
Last active August 7, 2020 17:21
Show Gist options
  • Save zac/dc581ac241bc882c8fde97bdae6ccc17 to your computer and use it in GitHub Desktop.
Save zac/dc581ac241bc882c8fde97bdae6ccc17 to your computer and use it in GitHub Desktop.
-[NSCalendarDate descriptionWithCalendarFormat:locale:] Disassembly
/* @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