/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400daa10 FUN_1400daa10 * Pseudocode, not original source. */ ulonglong FUN_1400daa10(char *param_1,uint param_2,longlong param_3,uint param_4,int param_5) { byte bVar1; uint *puVar2; undefined4 uVar3; undefined4 *puVar4; undefined4 extraout_var; undefined4 extraout_var_00; int *piVar5; uint uVar6; ulonglong uVar7; byte *pbVar8; longlong lVar9; bool bVar10; uint local_res8; int iVar11; uint local_38; uint local_34; uint local_30; uint local_2c; longlong local_28; uVar7 = (ulonglong)param_4; if ((param_1 == (char *)0x0) || (param_3 == 0)) { return 0x10; } if ((param_2 < 2) || ((*param_1 != '0' && (*param_1 != '1')))) { return 7; } bVar1 = param_1[1]; local_34 = 1; if (bVar1 < 0x80) { local_res8 = (uint)bVar1; local_34 = 2; } else if ((char)bVar1 < '\0') { if (bVar1 < 0x81) { return 7; } if (0x83 < bVar1) { return 7; } uVar6 = bVar1 & 0x7f; local_34 = 2; if (param_2 < uVar6 + 2) { return 7; } local_res8 = 0; if ((bVar1 & 0x7f) != 0) { pbVar8 = (byte *)(param_1 + 2); local_34 = uVar6 + 2; do { bVar1 = *pbVar8; pbVar8 = pbVar8 + 1; local_res8 = local_res8 << 8 | (uint)bVar1; uVar6 = uVar6 - 1; } while (uVar6 != 0); } } else { local_res8 = (uint)param_1; } if (param_2 < local_res8 + local_34) { return 7; } if (param_4 != 0) { puVar4 = (undefined4 *)(param_3 + 0x14); do { *puVar4 = 0; puVar4 = puVar4 + 0xe; uVar7 = uVar7 - 1; } while (uVar7 != 0); } local_30 = 0; local_28 = 0; if (param_4 != 0) { do { lVar9 = local_28 * 0x38; local_2c = *(uint *)(lVar9 + 0x10 + param_3); iVar11 = *(int *)(lVar9 + param_3); puVar2 = *(uint **)(lVar9 + 8 + param_3); if ((param_5 == 0) && (*(int *)(lVar9 + 0x14 + param_3) == 1)) goto LAB_1400dac10; if (iVar11 == 0) break; local_38 = local_res8; switch(iVar11) { case 1: uVar7 = FUN_1400e31e0(param_1 + local_34,local_res8,puVar2); if ((int)uVar7 != 0) { return uVar7; } uVar7 = FUN_1400e31c0(&local_38); break; case 2: uVar7 = FUN_1400e3030((byte *)(param_1 + local_34),local_res8,(longlong)puVar2); if ((int)uVar7 == 0) { uVar7 = FUN_1400e2f30((longlong)puVar2,(int *)&local_38); break; } goto LAB_1400dabf4; case 3: uVar7 = FUN_1400e2ed0((byte *)(param_1 + local_34),local_res8,puVar2); if ((int)uVar7 != 0) goto LAB_1400dabf4; uVar3 = FUN_1400e2e80(*puVar2,(int *)&local_38); uVar7 = CONCAT44(extraout_var,uVar3); break; case 4: uVar7 = FUN_1400e2d20((byte *)(param_1 + local_34),local_res8,(longlong)puVar2,&local_2c); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e2cd0((ulonglong)local_2c,(int *)&local_38); break; case 5: uVar7 = FUN_1400e2bd0((byte *)(param_1 + local_34),local_res8,(byte *)puVar2,&local_2c); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e2b80(local_2c,(int *)&local_38); break; case 6: if (((local_res8 < 2) || (param_1[local_34] != '\x05')) || (param_1[local_34 + 1] != '\0')) { if (param_5 != 0) { return 7; } goto LAB_1400dac10; } local_38 = 2; goto LAB_1400dabb8; case 7: uVar7 = FUN_1400e2a00((byte *)(param_1 + local_34),local_res8,puVar2,&local_2c); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e28d0(puVar2,local_2c,(int *)&local_38); break; case 8: uVar7 = FUN_1400e2790((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c ); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e26f0((byte *)puVar2,local_2c,(int *)&local_38); break; case 9: uVar7 = FUN_1400e2550((byte *)(param_1 + local_34),local_res8,(undefined1 *)puVar2,&local_2c ); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e24b0((byte *)puVar2,local_2c,(int *)&local_38); break; case 10: uVar7 = FUN_1400e22b0((byte *)(param_1 + local_34),local_res8,(ushort *)puVar2,&local_2c); if ((int)uVar7 != 0) goto LAB_1400dabf4; *(uint *)(lVar9 + 0x10 + param_3) = local_2c; uVar7 = FUN_1400e21a0((ushort *)puVar2,local_2c,(int *)&local_38); break; case 0xb: iVar11 = FUN_1400e1ea0((longlong)(param_1 + local_34),&local_38,puVar2); uVar7 = CONCAT44(extraout_var_00,iVar11); goto joined_r0x0001400daeb6; case 0xc: uVar7 = FUN_1400e18b0((byte *)(param_1 + local_34),&local_38,(longlong)puVar2,local_2c); iVar11 = (int)uVar7; joined_r0x0001400daeb6: if (iVar11 == 0) goto LAB_1400dabb8; LAB_1400dabf4: if (param_5 != 0) { return uVar7; } goto LAB_1400dac10; case 0xd: case 0xf: if (iVar11 == 0xf) { bVar10 = (param_1[local_34] & 0x3fU) == 0x31; LAB_1400dae92: if (!bVar10) { return 7; } } else if (iVar11 == 0xd) { bVar10 = (param_1[local_34] & 0x3fU) == 0x30; goto LAB_1400dae92; } iVar11 = 1; goto LAB_1400dae34; case 0xe: iVar11 = 0; LAB_1400dae34: uVar7 = FUN_1400daa10(param_1 + local_34,local_res8,(longlong)puVar2,local_2c,iVar11); if ((int)uVar7 == 0) { uVar7 = FUN_1400e1c20((longlong)puVar2,local_2c,(int *)&local_38); break; } goto LAB_1400dabf4; default: return 0x10; } if ((int)uVar7 != 0) { return uVar7; } LAB_1400dabb8: local_34 = local_34 + local_38; local_res8 = local_res8 - local_38; *(undefined4 *)(lVar9 + 0x14 + param_3) = 1; if (param_5 == 0) { local_30 = 0xffffffff; local_28 = -1; } LAB_1400dac10: local_30 = local_30 + 1; local_28 = local_28 + 1; } while (local_30 < param_4); } uVar6 = 0; if (param_4 != 0) { piVar5 = (int *)(param_3 + 0x14); do { if (*piVar5 == 0) { return 7; } uVar6 = uVar6 + 1; piVar5 = piVar5 + 0xe; } while (uVar6 < param_4); } return 0; }