Skip to content

Instantly share code, notes, and snippets.

@niw
Last active June 7, 2021 03:52
Show Gist options
  • Save niw/df6cd434f3431620a6986bea9114b8ba to your computer and use it in GitHub Desktop.
Save niw/df6cd434f3431620a6986bea9114b8ba to your computer and use it in GitHub Desktop.
int _parse_macho_iterate_slices(int arg0, int arg1) {
r14 = arg1;
r15 = arg0;
rax = open(arg0, 0x100);
if (rax >= 0x0) {
r14 = _parse_macho_iterate_slices_fd(rax, r15, r14);
close(rax);
rax = r14;
}
else {
syslog$DARWIN_EXTSN(0x3, "Failed to open macho file at %s for reading: %s", r15, strerror(*(int32_t *)__error()));
rax = 0x0;
}
return rax;
}
int _parse_macho_iterate_slices_fd(int arg0, int arg1, int arg2) {
r14 = arg2;
r15 = arg1;
rbx = arg0;
*(int128_t *)(&var_E0 + 0x80) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x80), 0x0);
*(int128_t *)(&var_E0 + 0x70) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x70), 0x0);
*(int128_t *)(&var_E0 + 0x60) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x60), 0x0);
*(int128_t *)(&var_E0 + 0x50) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x50), 0x0);
*(int128_t *)(&var_E0 + 0x40) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x40), 0x0);
*(int128_t *)(&var_E0 + 0x30) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x30), 0x0);
*(int128_t *)(&var_E0 + 0x20) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x20), 0x0);
*(int128_t *)(&var_E0 + 0x10) = intrinsic_movaps(*(int128_t *)(&var_E0 + 0x10), 0x0);
var_E0 = intrinsic_movaps(var_E0, 0x0);
if (fstat$INODE64() == 0x0) goto loc_4176;
loc_414d:
rax = strerror(*(int32_t *)__error());
goto loc_4160;
loc_4160:
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3);
goto loc_4195;
loc_4195:
rax = rbx;
return rax;
loc_4176:
if (var_80 > 0x8) goto loc_41a9;
loc_417d:
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3, "File at %s is not a valid mach-o (too small to contain a valid header)", r15);
goto loc_4195;
loc_41a9:
var_34 = 0x0;
*(int32_t *)__error() = 0x0;
rax = pread(rbx, &var_34, 0x4, 0x0);
if (rax != 0x4) goto loc_41f4;
loc_41cc:
if (0x0 > 0xcffaedfd) goto loc_420c;
loc_41d7:
if ((0x0 == 0xbebafeca) || (0x0 == 0xcafebabe)) goto loc_4257;
loc_41e7:
if (0x0 != 0xcefaedfe) {
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3, "Unknown binary with magic 0x%08x at %s");
}
else {
rax = __read_macho_header_and_load_commands(rbx, 0x0, var_80);
if (rax != 0x0) {
(*(r14 + 0x10))(r14, 0x0, rax);
free(rax);
rbx = 0x1;
}
else {
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3, "Failed to read macho header and load commands in %s at %u", r15, 0x0);
}
}
goto loc_4195;
loc_4257:
*(int32_t *)__error() = 0x0;
rax = pread(rbx, &var_30, 0x8, 0x0);
if (rax != 0x8) goto loc_431d;
loc_427e:
if (var_30 == 0xbebafeca) {
swap_fat_header(&var_30, 0x1);
}
syslog$DARWIN_EXTSN(0x7, "Got fat header with magic 0x%08x and %u archs");
rdx = var_2C;
if (rdx < 0x401) goto loc_435d;
loc_42c4:
r13 = 0x0;
syslog$DARWIN_EXTSN(0x3, "Number of fat archs %u exceeds the maximum %u");
goto loc_4345;
loc_4345:
rbx = 0x0;
goto loc_4347;
loc_4347:
if (r13 != 0x0) {
free(r13);
}
goto loc_4195;
loc_435d:
rax = rdx * 0x4;
if (var_80 <= rax + rax * 0x4 + 0x8) goto loc_446c;
loc_4374:
r12 = rax + rax * 0x4;
rax = malloc(r12);
r13 = rax;
if (r12 != pread(rbx, rax, r12, 0x8)) goto loc_4487;
loc_439e:
var_40 = r13;
swap_fat_arch(r13, var_2C, 0x1);
if (var_2C == 0x0) goto loc_4461;
loc_43bc:
rsi = var_40;
r13 = 0x0;
r12 = 0x0;
goto loc_43c6;
loc_43c6:
var_48 = rsi;
syslog$DARWIN_EXTSN(0x7, "Evaluating fat slice with cputype %d; subtype %d; offset %u; size %u; align %u", *(int32_t *)rsi, *(int32_t *)(rsi + 0x4), *(int32_t *)(rsi + 0x8), *(int32_t *)(rsi + 0xc), *(int32_t *)(rsi + 0x10));
rsi = *(int32_t *)(var_48 + 0x8);
rdx = var_80;
if (rdx <= rsi) goto loc_449f;
loc_4404:
var_50 = r13;
rax = __read_macho_header_and_load_commands(rbx, rsi, rdx);
if (rax == 0x0) goto loc_44ba;
loc_4418:
r13 = rax;
r12 = r12 & 0xff;
if ((*(r14 + 0x10))(r14, var_48, rax) == 0x0) {
r12 = 0x1;
}
free(r13);
rsi = var_48;
r13 = var_50;
if ((r12 & 0x1) != 0x0) goto loc_4461;
loc_444e:
r13 = r13 + 0x1;
rsi = rsi + 0x14;
if (r13 < var_2C) goto loc_43c6;
loc_4461:
rbx = 0x1;
r13 = var_40;
goto loc_4347;
loc_44ba:
syslog$DARWIN_EXTSN(0x3, "Failed to read macho header and load commands in %s at %u", r15, *(int32_t *)(var_48 + 0x8));
goto loc_44d7;
loc_44d7:
r13 = var_40;
goto loc_4345;
loc_449f:
syslog$DARWIN_EXTSN(0x3, "Fat arch %u in %s specifies offset which is beyond the end of the file", r13, r15);
goto loc_44d7;
loc_4487:
rax = strerror(*(int32_t *)__error());
goto loc_4333;
loc_4333:
syslog$DARWIN_EXTSN(0x3);
goto loc_4345;
loc_446c:
r13 = 0x0;
syslog$DARWIN_EXTSN(0x3, "File is not large enough to contain %u fat arch headers and their referenced slices.");
goto loc_4345;
loc_431d:
rax = strerror(*(int32_t *)__error());
r13 = 0x0;
goto loc_4333;
loc_420c:
if ((0x1120532 >= 0x2) && (0x0 != 0xcffaedfe)) {
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3, "Unknown binary with magic 0x%08x at %s");
}
else {
rax = __read_macho_header_and_load_commands(rbx, 0x0, var_80);
if (rax != 0x0) {
(*(r14 + 0x10))(r14, 0x0, rax);
free(rax);
rbx = 0x1;
}
else {
rbx = 0x0;
syslog$DARWIN_EXTSN(0x3, "Failed to read macho header and load commands in %s at %u", r15, 0x0);
}
}
goto loc_4195;
loc_41f4:
rax = strerror(*(int32_t *)__error());
goto loc_4160;
}
void _xcrun_main2(int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) {
r9 = arg5;
r8 = arg4;
rdx = arg2;
rsi = arg1;
r12 = rdx;
r15 = rsi;
rbx = arg0;
var_858 = _util_get_bool_from_environment();
var_831 = _util_get_bool_from_environment();
rax = _xcinfocache_create(arg3);
if (rax == 0x0) goto loc_8c4d;
loc_7bcd:
r14 = rax;
var_840 = rax;
var_848 = rbx;
if (rbx == 0x0) goto loc_7bfd;
loc_7be3:
var_850 = 0x0;
r13 = rbx;
var_860 = 0x0;
goto loc_80e9;
loc_80e9:
rbx = _util_get_bool_from_environment();
rax = _xcinfocache_is_xcode_utility(r13);
rax = _xcinfocache_open_cache(r14, rbx & 0xff, rax & 0xff, 0x1);
rbx = rax;
if (rax == 0x0) goto loc_8140;
loc_8118:
if (**___stack_chk_guard != **___stack_chk_guard) {
__stack_chk_fail();
}
return;
loc_8140:
rdx = var_848 != 0x0 ? 0x1 : 0x0;
var_848 = r13;
_xcinfocache_resolve_sdkroot(r14, r13, rdx, 0x1, r8, r9);
if (*(int8_t *)(r14 + 0x38) == 0x0) goto loc_82c4;
loc_816a:
rdx = 0x1;
setenv("SDKROOT", *(var_840 + 0x30), rdx);
if (*(int8_t *)(var_840 + 0x39) == 0x0) goto loc_82c4;
loc_8190:
r13 = *r12;
if (r13 == 0x0) goto loc_8297;
loc_819d:
r14 = r12 + 0x8;
var_864 = 0x0;
rbx = 0x0;
goto loc_81ae;
loc_81ae:
rdx = 0x1;
if (_strstartswith(r13, "-isysroot") != 0x0) goto loc_82c4;
loc_81c5:
rdx = 0x1;
if (strcmp(r13, "-sdk") == 0x0) goto loc_82c4;
loc_81dc:
rdx = 0x1;
if (_strstartswith(r13, "-syslibroot") != 0x0) goto loc_82c4;
loc_81f3:
rdx = 0x1;
if (_strstartswith(r13, "-Wl,-syslibroot") != 0x0) goto loc_82c4;
loc_820a:
rdx = 0x1;
if (_strstartswith(r13, "--sysroot") != 0x0) goto loc_82c4;
loc_8221:
if (strstr(r13, "-nostdsysteminc") != 0x0) {
rbx = 0x1;
}
else {
if (strcmp(r13, "-nostdinc") == 0x0) {
rbx = 0x1;
}
}
if ((strcmp(r13, "-Z") == 0x0) || (strcmp(r13, "-Wl,-Z") == 0x0)) {
var_864 = 0x1;
}
r13 = *r14;
r14 = r14 + 0x8;
if (r13 != 0x0) goto loc_81ae;
loc_828a:
COND = (rbx & 0x1) == 0x0;
rbx = var_864;
if (COND) {
_append_env("CPATH", "/usr/local/include");
}
goto loc_82ac;
loc_82ac:
rdx = 0x1;
if ((rbx & 0x1) == 0x0) {
rdx = 0x1;
_append_env("LIBRARY_PATH", "/usr/local/lib");
}
goto loc_82c4;
loc_82c4:
rsi = var_850;
if (rsi == 0x0) goto loc_830d;
loc_82d0:
rbx = var_840;
r14 = rsi;
rax = _xcinfocache_lookup_sdk_property(rbx, rsi, rdx, 0x1, r8, r9);
if (rax == 0x0) goto loc_8371;
loc_82eb:
rdx = rax;
goto loc_8301;
loc_8301:
rbx = 0x0;
fprintf(**___stdoutp, "%s\n", rdx);
goto loc_8118;
loc_8371:
_error("unable to lookup item '%s' in SDK '%s'", r14, *(rbx + 0x30), 0x1, r8, r9, stack[-2200]);
rbx = 0x1;
goto loc_8118;
loc_830d:
r14 = var_840;
if ((var_860 & 0x1) != 0x0) goto loc_8390;
loc_831d:
rbx = var_848;
if (rbx == 0x0) goto loc_83e0;
loc_832d:
if (*(int8_t *)(r14 + 0x10) != 0x0) {
_xcinfocache_note_variables(r14);
rdx = getprogname();
_note("xcrun via %s (%s)", var_848, rdx, 0x1, r8, r9, stack[-2200]);
rbx = var_848;
}
if (*(int8_t *)rbx != 0x2f) goto loc_840c;
loc_8369:
rcx = 0x1;
r14 = rbx;
goto loc_853e;
loc_853e:
rdi = strdup(r14);
if ((var_858 & 0x1) != 0x0) goto loc_86a1;
loc_8556:
rbx = &var_888;
*rbx = 0x0;
*(rbx + 0x8) = rbx;
*(rbx + 0x10) = 0x2000000000;
*(int32_t *)(rbx + 0x18) = 0xffffffffffffffff;
var_858 = rdi;
if (*_is_bni.once != 0xffffffffffffffff) {
dispatch_once(_is_bni.once, ^ {/* block implemented at ___is_bni_block_invoke */ } });
}
if ((*(int8_t *)_is_bni.retval != 0x0) || (getenv("SYSTEM_VERSION_COMPAT") != 0x0)) goto loc_86bc;
loc_85b4:
var_830 = *__NSConcreteStackBlock;
*(&var_830 + 0x8) = 0x42000000;
*(&var_830 + 0x10) = ___util_has_valid_deployment_target_block_invoke;
*(&var_830 + 0x18) = ___block_descriptor_tmp.11;
*(&var_830 + 0x20) = rbx;
rax = _parse_macho_iterate_slices(var_858, &var_830);
if (rax == 0x0) goto loc_86bc;
loc_85fb:
rbx = *(int32_t *)(var_880 + 0x18);
if (rbx == 0xffffffff) goto loc_86bc;
loc_860e:
r14 = *__NSConcreteStackBlock;
dyld_image_header_containing_address(*_dyld_image_header_containing_address);
var_430 = r14;
if (*_host_version.once != 0xffffffffffffffff) {
dispatch_once(_host_version.once, &var_430);
}
rcx = ___block_descriptor_tmp.25;
r14 = *(int32_t *)_host_version.version;
_Block_object_dispose(&var_888, 0x8);
if (rbx <= r14) goto loc_86cd;
loc_867a:
_error("unable execute utility \"%s\" because it requires a newer version of macOS.", _path_escape_shell_copy(var_858), rdx, ___block_descriptor_tmp.25, r8, r9, stack[-2200]);
exit(0x46);
return;
loc_86cd:
r13 = r15 + 0x1;
r14 = malloc(sign_extend_64(r15) * 0x8 + 0x10);
*r14 = strdup(var_858);
if (sign_extend_64(r15) != 0x0) {
rax = r15;
rcx = 0x0;
do {
rdx = *(r12 + rcx * 0x8);
*(r14 + rcx * 0x8 + 0x8) = rdx;
rcx = rcx + 0x1;
} while (rax != rcx);
}
*(r14 + sign_extend_64(r13) * 0x8) = 0x0;
if ((var_831 & 0x1) == 0x0) {
rbx = var_858;
if (*(int8_t *)(var_840 + 0x10) != 0x0) {
fflush(**___stdoutp);
fflush(**___stderrp);
}
}
else {
rcx = var_840;
if (*(int8_t *)(rcx + 0x38) != 0x0) {
rbx = **___stderrp;
rdx = _path_escape_shell_copy(*(rcx + 0x30));
fprintf(rbx, "env SDKROOT=%s ", rdx);
}
rdi = *r14;
r12 = **___stderrp;
if (rdi != 0x0) {
r13 = 0x0;
do {
rbx = " ";
if (r13 == 0x0) {
rbx = "";
}
r15 = *___stderrp;
rax = _path_escape_shell_copy(rdi);
rdx = rbx;
rcx = rax;
fprintf(r12, "%s%s", rdx, rcx);
rdi = *(r14 + r13 * 0x8 + 0x8);
r13 = r13 + 0x1;
r12 = *r15;
} while (rdi != 0x0);
}
fputc(0xa, r12);
rbx = var_858;
fflush(**___stdoutp);
fflush(**___stderrp);
}
_xcinfocache_free(var_840);
execv(rbx, r14);
_syserror("can't exec '%s'", rbx, rdx, rcx, r8, r9, stack[-2200]);
wait(0x0);
rbx = 0x47;
goto loc_8118;
loc_86bc:
_Block_object_dispose(&var_888, 0x8);
goto loc_86cd;
loc_86a1:
puts(rdi);
fflush(**___stdoutp);
goto loc_86b5;
loc_86b5:
rbx = 0x0;
goto loc_8118;
loc_840c:
if (strchr(rbx, 0x2f) == 0x0) goto loc_8465;
loc_841e:
rax = getcwd(&var_430, 0x400);
if (rax == 0x0) goto loc_8532;
loc_8438:
rcx = 0x1;
_path_append(&var_430, var_848);
rdi = &var_430;
goto loc_8451;
loc_8451:
r14 = strdup(rdi);
goto loc_8535;
loc_8535:
if (r14 == 0x0) goto loc_8d89;
goto loc_853e;
loc_8d89:
rsi = var_848;
if (strncmp("svn", rsi, 0x3) == 0x0) {
_error("The subversion command line tools are no longer provided by Xcode.", rsi, 0x3, rcx, r8, r9, stack[-2200]);
}
else {
if (*_xcrun_unknown_utility_handler == 0x0) {
_error("unable to find utility \"%s\", not a developer tool or in PATH", _path_escape_shell_copy(var_848), 0x3, rcx, r8, r9, stack[-2200]);
}
else {
rbx = *_xcrun_unknown_utility_handler;
(*(rbx + 0x10))(rbx, _path_escape_shell_copy(var_848));
}
}
exit(0x48);
return;
loc_8532:
rcx = 0x1;
r14 = 0x0;
goto loc_8535;
loc_8465:
r8 = *(r14 + 0x18);
rdx = *(r14 + 0x30);
rcx = *(r14 + 0x40);
r9 = *(r14 + 0x70);
r13 = _msprintf("%s|%s|%s|%s|%s", rbx, rdx, rcx, r8, r9, stack[-2200]);
if (*(int8_t *)(r14 + 0x10) != 0x0) {
_note("database key is: %s", r13, rdx, rcx, r8, r9, stack[-2200]);
}
rdi = *(r14 + 0x8);
rbx = r14;
if ((rdi == 0x0) || (*(int8_t *)(rbx + 0x12) != 0x0)) goto loc_84b7;
loc_887b:
rax = _diskstrmap_lookup(rdi, r13);
if (rax == 0x0) goto loc_84b7;
loc_888c:
r14 = rax;
if (*(int8_t *)(rbx + 0x10) != 0x0) {
_note("lookup resolved in '%s' : '%s'", **(rbx + 0x8), r14, rcx, r8, r9, stack[-2200]);
}
rdx = &var_830;
rax = _extract_toolchain_signature(r14, &var_430, rdx);
if (rax == 0x0) goto loc_8991;
loc_88cb:
rax = _diskstrmap_lookup(*(var_840 + 0x8), &var_830);
if (rax == 0x0) goto loc_88fe;
loc_88e7:
rax = strcmp(rax, &var_430);
if (rax == 0x0) goto loc_8991;
loc_88fe:
if (*(int8_t *)(var_840 + 0x10) != 0x0) {
_warning("cache result '%s' is in an out-of-date toolchain", r14, rdx, rcx, r8, r9, stack[-2200]);
}
rbx = var_840;
goto loc_84b7;
loc_84b7:
if (*(int8_t *)(rbx + 0x20) == 0x0) goto loc_8833;
loc_84c1:
rax = _cltools_search_for_utility(*(rbx + 0x18), var_848);
goto loc_84d1;
loc_84d1:
r14 = rax;
goto loc_84d4;
loc_84d4:
if (r14 == 0x0) goto loc_8d89;
loc_84dd:
rdi = *(var_840 + 0x8);
if (rdi != 0x0) {
_diskstrmap_insert(rdi, r13, r14, rcx, r8, r9);
rdx = &var_830;
rax = _extract_toolchain_signature(r14, &var_430, rdx);
if (rax != 0x0) {
rdx = &var_430;
rax = _diskstrmap_insert(*(var_840 + 0x8), &var_830, rdx, rcx, r8, r9);
}
}
goto loc_853e;
loc_8833:
r14 = var_848;
if (_xcinfocache_is_xcode_utility(r14) == 0x0) goto loc_8928;
loc_884a:
if (strcmp(r14, "xcodebuild") == 0x0) goto loc_89d4;
loc_8861:
rdx = r14;
rax = _msprintf("%s/usr/bin/%s", *(rbx + 0x18), rdx, rcx, r8, r9, stack[-2200]);
goto loc_84d1;
loc_89d4:
r14 = *(rbx + 0x28);
goto loc_84d4;
loc_8928:
rbx = *(rbx + 0x30);
var_850 = r13;
if (*(int8_t *)rbx == 0x2f) {
rax = realpath$DARWIN_EXTSN(rbx, 0x0);
r14 = rax;
if (rax != 0x0) {
rax = realpath$DARWIN_EXTSN(*(var_840 + 0x18), 0x0);
if (rax != 0x0) {
var_860 = rax;
if (_strstartswith(r14, rax) == 0x0) {
rbx = "macosx";
}
}
else {
var_860 = 0x0;
_syserror("Failed to determine realpath of '%s'", *(var_840 + 0x18), rdx, rcx, r8, r9, stack[-2200]);
}
}
else {
_syserror("Failed to determine realpath of '%s'", rbx, rdx, rcx, r8, r9, stack[-2200]);
rax = realpath$DARWIN_EXTSN(*(var_840 + 0x18), 0x0);
if (rax != 0x0) {
var_860 = rax;
}
else {
var_860 = 0x0;
_syserror("Failed to determine realpath of '%s'", *(var_840 + 0x18), rdx, rcx, r8, r9, stack[-2200]);
}
}
free(r14);
free(var_860);
}
r13 = _path_escape_shell_copy(*(var_840 + 0x28));
rbx = _path_escape_shell_copy(rbx);
rax = _path_escape_shell_copy(var_848);
rdx = rbx;
rcx = rax;
rbx = _msprintf("%s -sdk %s -find %s 2> /dev/null", r13, rdx, rcx, r8, r9, stack[-2200]);
if (*(int8_t *)(var_840 + 0x10) != 0x0) {
_note("looking up with '%s'", rbx, rdx, rcx, r8, r9, stack[-2200]);
}
r14 = rbx;
rax = popen(rbx, "r");
if (rax == 0x0) goto loc_8d60;
loc_8abb:
r13 = fparseln(rax, 0x0, 0x0, 0x0, 0x0);
rax = pclose(rax);
if (rax != 0x0) goto loc_8d73;
loc_8ae2:
if ((r13 == 0x0) || (*(int8_t *)r13 == 0x0)) goto loc_8d3d;
loc_8af6:
if (*(int8_t *)(var_840 + 0x10) != 0x0) {
_note("lookup resolved with 'xcodebuild -find' to '%s'", _path_escape_shell_copy(r13), 0x0, 0x0, 0x0, r9, stack[-2200]);
}
r14 = _path_clean_copy(r13);
if (_is_path_xcrun_shim() == 0x0) goto loc_8b94;
loc_8b33:
rdx = 0x0;
rbx = var_848;
r13 = var_850;
if (*(int8_t *)(var_840 + 0x10) != 0x0) {
rdx = rbx;
_note("xcodebuild resolved path (%s) is an xcrun sim, falling back on internal implementaion to locate '%s'.", r14, rdx, 0x0, 0x0, r9, stack[-2200]);
}
r8 = 0x0;
rcx = 0x0;
rax = _cltools_search_for_utility(*(var_840 + 0x18), rbx);
r14 = rax;
if (rax != 0x0) goto loc_84dd;
loc_8b81:
rdi = "Failed to locate '%s'.";
rsi = var_848;
goto loc_8d57;
loc_8d57:
r8 = 0x0;
rcx = 0x0;
_error(rdi, rsi, rdx, rcx, r8, r9, stack[-2200]);
goto loc_8d89;
loc_8b94:
r8 = 0x0;
rdx = 0x0;
rcx = 0x0;
r13 = var_850;
goto loc_84d4;
loc_8d3d:
rdx = 0x0;
rax = _path_escape_shell_copy(*(var_840 + 0x28));
rdi = "%s didn't return any data";
rsi = rax;
goto loc_8d57;
loc_8d73:
r8 = 0x0;
rcx = r13;
_syserror("sh -c '%s' failed with exit code %d: %s", r14, rax, rcx, r8, r9, stack[-2200]);
goto loc_8d89;
loc_8d60:
_syserror("unable to launch '%s'", r14, rdx, rcx, r8, r9, stack[-2200]);
goto loc_8d89;
loc_8991:
if ((_path_is_executable_file(r14) == 0x0) || (_is_path_xcrun_shim() != 0x0)) goto loc_89ad;
loc_8ba0:
rdi = r14;
goto loc_8451;
loc_89ad:
rbx = var_840;
if (*(int8_t *)(rbx + 0x10) != 0x0) {
_warning("cache result '%s' does not exist or isn't executable", r14, rdx, rcx, r8, r9, stack[-2200]);
}
goto loc_84b7;
loc_83e0:
rbx = 0x0;
if (*(int8_t *)(r14 + 0x11) == 0x0) {
__assert_rtn("xcrun_main2", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcrun.c", 0x190, "xcinfocache_get_reset_cache(infocache) && \"unexpect missing utility name\"");
}
else {
if (**___stack_chk_guard != **___stack_chk_guard) {
__stack_chk_fail();
}
}
return;
loc_8390:
_xcrun_iter_manpaths(*(r14 + 0x18), *(r14 + 0x30), ^ {/* block implemented at ___xcrun_main2_block_invoke */ } }, 0x1, r8, r9);
goto loc_86b5;
loc_8297:
rbx = 0x0;
_append_env("CPATH", "/usr/local/include");
goto loc_82ac;
loc_7bfd:
if (r15 == 0x0) goto loc_8bfe;
loc_7c06:
var_860 = 0x0;
var_850 = 0x0;
rcx = 0x0;
goto loc_7c1a;
loc_7c1a:
r13 = *r12;
if (*(int8_t *)r13 != 0x2d) goto loc_7c35;
loc_7c25:
if (*(int8_t *)(r13 + 0x1) != 0x2d) {
rbx = rcx;
r14 = r13 + 0x1;
}
else {
rbx = rcx;
r14 = r13 + 0x2;
}
if (strcmp(r14, "sdk") == 0x0) goto loc_7e95;
loc_7c79:
if (strcmp(r14, "toolchain") == 0x0) goto loc_7ecb;
loc_7c90:
if ((strcmp(r14, "h") == 0x0) || (strcmp(r14, "help") == 0x0)) goto loc_8be6;
loc_7cbe:
if (strcmp(r14, "version") == 0x0) goto loc_8c08;
loc_7cd5:
rsi = "l";
if (strcmp(r14, rsi) == 0x0) goto loc_7ec2;
loc_7cec:
rsi = "log";
if (strcmp(r14, rsi) == 0x0) goto loc_7ec2;
loc_7d03:
rsi = "f";
if (strcmp(r14, rsi) == 0x0) goto loc_7f09;
loc_7d1a:
rsi = "find";
if (strcmp(r14, rsi) == 0x0) goto loc_7f09;
loc_7d31:
rsi = "r";
if (strcmp(r14, rsi) == 0x0) goto loc_7f27;
loc_7d48:
rsi = "run";
if (strcmp(r14, rsi) == 0x0) goto loc_7f27;
loc_7d5f:
rsi = "v";
if (strcmp(r14, rsi) == 0x0) goto loc_7f3d;
loc_7d76:
rsi = "verbose";
if (strcmp(r14, rsi) == 0x0) goto loc_7f3d;
loc_7d8d:
rsi = "n";
if (strcmp(r14, rsi) == 0x0) goto loc_7f55;
loc_7da4:
rsi = "no-cache";
if (strcmp(r14, rsi) == 0x0) goto loc_7f55;
loc_7dbb:
rsi = "k";
if (strcmp(r14, rsi) == 0x0) goto loc_7f6d;
loc_7dd2:
rsi = "kill-cache";
if (strcmp(r14, rsi) == 0x0) goto loc_7f6d;
loc_7de9:
if (strcmp(r14, "show-cache-path") == 0x0) goto loc_8007;
loc_7e00:
if (strcmp(r14, "show-sdk-path") == 0x0) goto loc_7f85;
loc_7e17:
if (strcmp(r14, "show-sdk-version") == 0x0) goto loc_7f8e;
loc_7e2e:
if (strcmp(r14, "show-sdk-build-version") == 0x0) goto loc_7f97;
loc_7e45:
if (strcmp(r14, "show-sdk-platform-path") == 0x0) goto loc_7fa0;
loc_7e5c:
if (strcmp(r14, "show-sdk-platform-version") == 0x0) goto loc_7fa9;
loc_7e73:
if (strcmp(r14, "show-manpaths") != 0x0) goto loc_8029;
loc_7e8a:
rsi = "show-manpaths";
var_860 = 0x1;
goto loc_7f12;
loc_7f12:
rcx = rbx;
goto loc_7f15;
loc_7f15:
r12 = r12 + 0x8;
r15 = r15 - 0x1;
if (r15 != 0x0) goto loc_7c1a;
loc_7fbc:
rsi = var_850;
rbx = rsi != 0x0 ? 0x1 : 0x0;
rdx = var_860;
r14 = (rdx & 0x1) == 0x0 ? 0x1 : 0x0;
r15 = 0x0;
if (((var_858 | rdx) & 0x1) != 0x0) goto loc_809c;
loc_7feb:
r15 = 0x0;
if (rsi != 0x0) goto loc_809c;
loc_7ff4:
if (rcx != 0x0) goto loc_8cdf;
loc_7ffd:
rcx = 0x0;
goto loc_7fff;
loc_7fff:
r15 = 0x0;
goto loc_809c;
loc_809c:
if ((rbx != 0x0) || (rcx != 0x0)) goto loc_80ca;
loc_80a5:
if (r14 == 0x0) goto loc_80d6;
loc_80aa:
r14 = var_840;
if (*(int8_t *)(r14 + 0x11) == 0x0) goto loc_8cfe;
loc_80bc:
r13 = 0x0;
var_850 = 0x0;
goto loc_80e9;
loc_8cfe:
_error("no utility name specified", rsi, rdx, rcx, r8, r9, stack[-2200]);
goto loc_8bfe;
loc_8bfe:
_PrintUsageAndExit(0x40);
return;
loc_80d6:
r13 = 0x0;
var_850 = 0x0;
r14 = var_840;
goto loc_80e9;
loc_80ca:
r14 = var_840;
r13 = rcx;
goto loc_80e9;
loc_8cdf:
__assert_rtn("xcrun_main2", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcrun.c", 0x129, "utility == 0 && \"utility value should not be set\"");
return;
loc_8029:
if (*(int8_t *)r14 != 0x0) goto loc_8dff;
loc_8033:
rsi = "show-manpaths";
r15 = r15 - 0x1;
r12 = r12 + 0x8;
rcx = rbx;
goto loc_803d;
loc_803d:
rax = var_850;
COND = rax == 0x0;
rbx = COND_BYTE_SET(NE);
r14 = (var_860 & 0x1) != 0x0 ? 0x1 : 0x0;
if (((var_860 & 0x1) != 0x0) || (rax != 0x0)) goto loc_8093;
loc_805c:
if ((var_858 & 0x1) != 0x0) goto loc_83a9;
loc_8069:
if (rcx != 0x0) goto loc_8cdf;
loc_8072:
if (r15 > 0x0) {
r14 = 0x1;
rcx = strdup(*r12);
r15 = r15 - 0x1;
r12 = r12 + 0x8;
}
else {
r14 = 0x1;
rcx = 0x0;
}
goto loc_809c;
loc_83a9:
r14 = 0x1;
if (r15 <= 0x0) goto loc_809c;
loc_83b5:
rsi = *r12;
if (rcx != 0x0) goto loc_8d21;
loc_83c2:
rax = strdup(rsi);
r12 = r12 + 0x8;
if (r15 >= 0x2) goto loc_8d2d;
loc_83d8:
r14 = 0x1;
rcx = rax;
goto loc_7fff;
loc_8d2d:
rsi = *r12;
rdi = "unexpected trailing argument '%s' in \"find\" mode";
goto loc_8bf7;
loc_8bf7:
_error(rdi, rsi, rdx, rcx, r8, r9, stack[-2200]);
goto loc_8bfe;
loc_8d21:
rdi = "invalid argument '%s', cannot specify multiple utility names";
goto loc_8bf7;
loc_8093:
if (r15 > 0x0) goto loc_8d11;
goto loc_809c;
loc_8d11:
rsi = *r12;
rdi = "unexpected trailing argument '%s' with --show-sdk option";
goto loc_8bf7;
loc_8dff:
rdi = "unrecognized option: %s";
goto loc_8bf4;
loc_8bf4:
rsi = r13;
goto loc_8bf7;
loc_7fa9:
rsi = "show-sdk-platform-version";
rax = "PlatformVersion";
goto loc_7fb0;
loc_7fb0:
var_850 = rax;
goto loc_7f12;
loc_7fa0:
rsi = "show-sdk-platform-path";
rax = "PlatformPath";
goto loc_7fb0;
loc_7f97:
rsi = "show-sdk-build-version";
rax = "ProductBuildVersion";
goto loc_7fb0;
loc_7f8e:
rsi = "show-sdk-version";
rax = "SDKVersion";
goto loc_7fb0;
loc_7f85:
rsi = "show-sdk-path";
rax = "Path";
goto loc_7fb0;
loc_8007:
rdx = *var_840;
goto loc_8301;
loc_7f6d:
rax = var_840;
if (*(rax + 0x8) != 0x0) goto loc_8cc0;
loc_7f7f:
*(int8_t *)(rax + 0x11) = 0x1;
goto loc_7f12;
loc_8cc0:
__assert_rtn("xcinfocache_set_reset_cache", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcinfocache.c", 0x178, "!cache->db && \"cannot set reset cache value after open!\"");
return;
loc_7f55:
rax = var_840;
if (*(rax + 0x8) != 0x0) goto loc_8ca1;
loc_7f67:
*(int8_t *)(rax + 0x12) = 0x1;
goto loc_7f12;
loc_8ca1:
__assert_rtn("xcinfocache_set_skip_cache", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcinfocache.c", 0x194, "!cache->db && \"cannot set skip cache value after open!\"");
return;
loc_7f3d:
rax = var_840;
if (*(rax + 0x8) != 0x0) goto loc_8c82;
loc_7f4f:
*(int8_t *)(rax + 0x10) = 0x1;
goto loc_7f12;
loc_8c82:
__assert_rtn("xcinfocache_set_verbose", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcinfocache.c", 0x1a2, "!cache->db && \"cannot set verbose value after open!\"");
return;
loc_7f27:
if (rbx != 0x0) goto loc_8c76;
loc_7f30:
rcx = 0x0;
var_858 = 0x0;
goto loc_7f15;
loc_8c76:
rdi = "invalid argument '%s', cannot revert to \"run\" mode after specifying a utility name";
goto loc_8bf4;
loc_7f09:
var_858 = 0x1;
goto loc_7f12;
loc_7ec2:
var_831 = 0x1;
goto loc_7f12;
loc_8c08:
fprintf(**___stdoutp, "xcrun version %s.\n", "59");
exit(0x0);
return;
loc_8be6:
_PrintUsageAndExit(0x0);
return;
loc_7ecb:
r15 = r15 - 0x1;
if (r15 == 0x0) goto loc_8bed;
loc_7ed4:
rcx = var_840;
if (*(rcx + 0x8) != 0x0) goto loc_8c57;
loc_7ee6:
r12 = r12 + 0x8;
*(rcx + 0x40) = *r12;
rsi = *r12;
rdx = 0x1;
setenv("TOOLCHAINS", rsi, rdx);
goto loc_7f12;
loc_8c57:
__assert_rtn("xcinfocache_set_toolchains", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcinfocache.c", 0x199, "!cache->db && \"cannot set toolchains value after open!\"");
return;
loc_8bed:
rdi = "argument to '%s' is missing";
goto loc_8bf4;
loc_7e95:
r15 = r15 - 0x1;
if (r15 == 0x0) goto loc_8bed;
loc_7e9e:
rcx = var_840;
if (*(rcx + 0x8) != 0x0) goto loc_8c2e;
loc_7eb0:
rsi = "sdk";
r12 = r12 + 0x8;
*(rcx + 0x30) = *r12;
*(int8_t *)(rcx + 0x38) = 0x1;
goto loc_7f12;
loc_8c2e:
__assert_rtn("xcinfocache_set_sdkroot", "/Library/Caches/com.apple.xbs/Sources/xcrun/xcrun-59/src/xcinfocache.c", 0x18e, "!cache->db && \"cannot set reset cache value after open!\"");
return;
loc_7c35:
if ((var_858 & 0x1) == 0x0) goto loc_803d;
loc_7c42:
if (rcx != 0x0) goto loc_8bdd;
loc_7c4b:
rcx = strdup(r13);
goto loc_7f15;
loc_8bdd:
rdi = "invalid argument '%s', cannot specify multiple utility names";
goto loc_8bf4;
loc_8c4d:
exit(0x4a);
return;
}
void _xcselect_invoke_xcrun(int arg0, int arg1, int arg2, int arg3) {
rbx = arg3;
r14 = arg2;
r15 = arg1;
r12 = arg0;
if (_xpc_runtime_is_app_sandboxed(arg0, arg1, arg2, arg3) == 0x0) goto loc_7fff2e6f4058;
loc_7fff2e6f4033:
rcx = **___stderrp;
rdi = "xcrun: error: cannot be used within an App Sandbox.\n";
rsi = 0x34;
goto loc_7fff2e6f4049;
loc_7fff2e6f4049:
fwrite(rdi, rsi, 0x1, rcx);
goto loc_7fff2e6f41c4;
loc_7fff2e6f41c4:
exit(0x1);
return;
loc_7fff2e6f4058:
rax = _xcselect_get_developer_dir_path(&var_440, 0x400, &var_2B, &var_2A, &var_29);
if (rax == 0x0) goto loc_7fff2e6f40a3;
loc_7fff2e6f4079:
if ((var_2A == 0x0) || (rbx == 0x0)) goto loc_7fff2e6f40be;
loc_7fff2e6f4083:
rdi = **___stderrp;
rsi = "xcode-select: error: tool '%s' requires Xcode, but active developer directory '%s' is a command line tools instance\n";
goto loc_7fff2e6f41bd;
loc_7fff2e6f41bd:
fprintf(rdi, rsi);
goto loc_7fff2e6f41c4;
loc_7fff2e6f40be:
if (r12 != 0x0) {
unsetenv("xcrun_log");
}
rax = _path_join(&var_840, 0x400, &var_440, "usr/lib/libxcrun.dylib");
if (_path_exists() == 0x0) goto loc_7fff2e6f41ce;
loc_7fff2e6f4101:
rax = _xcselect_invoke_xcrun_via_library(&var_840, r12, r15, r14, &var_440);
goto loc_7fff2e6f411d;
loc_7fff2e6f411d:
r13 = &var_840;
_path_join(r13, 0x400, "/usr/libexec/DeveloperTools", r12);
if (_path_exists() == 0x0) goto loc_7fff2e6f421d;
loc_7fff2e6f414b:
r12 = sign_extend_64(r15);
rax = malloc(r12 * 0x8 + 0x10);
rbx = rax;
*rax = r13;
if (r12 != 0x0) {
memcpy(rbx + 0x8, r14, r15 << 0x3);
}
*(rbx + r12 * 0x8 + 0x8) = 0x0;
execv(&var_840, rbx);
rbx = **___stderrp;
strerror(*(int32_t *)__error());
rsi = "xcrun: error: unable to exec %s (%s).\n";
rdi = rbx;
goto loc_7fff2e6f41bd;
loc_7fff2e6f421d:
if (var_29 == 0x0) {
rcx = **___stderrp;
rdi = "xcrun: error: unable to get active developer path\nUse `sudo xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools, or use `xcode-select --install` to install the standalone command line develope…";
rsi = 0x132;
}
else {
getprogname();
rax = _xcselect_trigger_install_request();
rcx = *___stderrp;
rcx = *rcx;
if (rax != 0x0) {
rdi = "xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.\n";
rsi = 0xb1;
}
else {
rdi = "xcode-select: error: no developer tools were found at '/Applications/Xcode.app', and no install could be requested (perhaps no UI is present), please install manually from 'developer.apple.com'.\n";
rsi = 0xc3;
}
}
goto loc_7fff2e6f4049;
loc_7fff2e6f41ce:
r13 = &var_C40;
rax = _path_join(r13, 0x400, &var_440, "usr/bin/xcrun");
if (_is_path_xcrun_shim() == 0x0) goto loc_7fff2e6f4242;
loc_7fff2e6f41fc:
fprintf(**___stderrp, "xcode-select: error: malformed developer path (\"%s\")\n", &var_440);
goto loc_7fff2e6f41c4;
loc_7fff2e6f4242:
rbx = r12 != 0x0 ? 0x1 : 0x0;
rax = sign_extend_32(rbx + r15);
var_38 = rax;
rax = malloc(rax * 0x8 + 0x10);
*rax = r13;
if (r12 != 0x0) {
*(rax + 0x8) = r12;
}
if (r15 != 0x0) {
rcx = r15;
rbx = rbx + 0x1;
rdx = 0x0;
do {
rdi = rdx + 0x1;
*(rax + (rdx + rbx) * 0x8) = *(r14 + rdx * 0x8);
rdx = rdi;
} while (rcx != rdi);
}
*(rax + var_38 * 0x8 + 0x8) = 0x0;
_xcselect_invoke_xcrun_via_binary(&var_C40, rax, &var_440, var_2B & 0xff);
getprogname();
rax = _xcselect_trigger_install_request();
rcx = *___stderrp;
rcx = *rcx;
if (rax != 0x0) {
rdi = "xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.\n";
rsi = 0xb1;
}
else {
rdi = "xcode-select: error: no developer tools were found at '/Applications/Xcode.app', and no install could be requested (perhaps no UI is present), please install manually from 'developer.apple.com'.\n";
rsi = 0xc3;
}
goto loc_7fff2e6f4049;
loc_7fff2e6f40a3:
if (r12 != 0x0) goto loc_7fff2e6f411d;
loc_7fff2e6f40a8:
if (var_29 != 0x0) {
rax = _xcselect_trigger_install_request();
rcx = *___stderrp;
rcx = *rcx;
if (rax != 0x0) {
rdi = "xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.\n";
rsi = 0xb1;
}
else {
rdi = "xcode-select: error: no developer tools were found at '/Applications/Xcode.app', and no install could be requested (perhaps no UI is present), please install manually from 'developer.apple.com'.\n";
rsi = 0xc3;
}
}
else {
rcx = **___stderrp;
rdi = "xcrun: error: unable to get active developer path\nUse `sudo xcode-select --switch path/to/Xcode.app` to specify the Xcode that you wish to use for command line developer tools, or use `xcode-select --install` to install the standalone command line develope…";
rsi = 0x132;
}
goto loc_7fff2e6f4049;
}
int _xcselect_invoke_xcrun_via_library(int arg0, int arg1, int arg2, int arg3, int arg4) {
rbx = arg4;
r15 = arg3;
r12 = arg2;
r13 = arg1;
rax = dlopen(arg0, 0x5);
if (rax != 0x0) goto loc_7fff2e6f4335;
loc_7fff2e6f431d:
rax = dlerror();
rsi = "xcrun: error: unable to load libxcrun (%s).\n";
goto loc_7fff2e6f4366;
loc_7fff2e6f4366:
fprintf(**___stderrp, rsi);
goto loc_7fff2e6f43dc;
loc_7fff2e6f43dc:
rax = exit(0x1);
return rax;
loc_7fff2e6f4335:
r14 = rax;
var_30 = rbx;
rax = dlsym(rax, "xcrun_main");
if (rax != 0x0) goto loc_7fff2e6f4375;
loc_7fff2e6f4350:
rax = dlerror();
rsi = "xcrun: error: unable to resolve xcrun_main (%s).\n";
goto loc_7fff2e6f4366;
loc_7fff2e6f4375:
rbx = rax;
if (strcmp(*_NSGetProgname(), "xcrun") != 0x0) {
rax = dlsym(r14, "xcrun_set_unknown_utility_handler");
if (rax != 0x0) {
(rax)(___block_literal_global.61, "xcrun_set_unknown_utility_handler");
}
}
(rbx)(r13, r12, r15, var_30);
fwrite("xcrun: error: unexpected exit from xcrun_main", 0x2d, 0x1, **___stderrp);
goto loc_7fff2e6f43dc;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment