/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14006ef00 FUN_14006ef00 * Pseudocode, not original source. */ ulonglong FUN_14006ef00(SIZE_T *param_1,uint *param_2,SIZE_T param_3,undefined4 param_4, longlong param_5,LPVOID param_6,undefined4 param_7) { ulonglong *puVar1; int iVar2; void *pvVar3; uint *puVar4; LPVOID pvVar5; longlong *plVar6; undefined8 uVar7; longlong *plVar8; ulonglong uVar9; uint *puVar10; ulonglong uVar11; uint **ppuVar12; uint uVar13; int *piVar14; SIZE_T SVar15; TypeDescriptor *pTVar16; ulonglong uVar17; longlong *plVar18; longlong lVar19; uint *local_res10; ulonglong *local_78; undefined **local_68; undefined8 local_60; undefined8 local_58; undefined8 local_50; undefined8 local_48; plVar18 = (longlong *)0x0; local_res10 = param_2; if (*(longlong *)(param_2 + 0x8a) == 0) { pvVar3 = *(void **)(param_2 + 0x8a); SVar15 = param_3; if (pvVar3 != (void *)0x0) { FUN_140049e40((undefined8 *)((longlong)pvVar3 + 8)); operator_delete(pvVar3); } param_2[0x8a] = 0; param_2[0x8b] = 0; plVar6 = operator_new(0x40); plVar8 = plVar18; if (plVar6 != (longlong *)0x0) { plVar6[2] = 0; plVar6[3] = 0; plVar6[4] = 0; plVar6[5] = 0; plVar6[1] = (longlong)Proud::ByteArray::vftable; *(undefined4 *)plVar6 = 0; *(undefined4 *)(plVar6 + 7) = 0; plVar6[6] = 0; plVar8 = plVar6; } *(longlong **)(param_2 + 0x8a) = plVar8; *(int *)plVar8 = (int)param_3; *(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 4) = param_4; lVar19 = *(longlong *)(param_2 + 0x8a); iVar2 = *(int *)(param_5 + 0x18); if (iVar2 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } FUN_14002a050(lVar19 + 8,iVar2,SVar15); plVar8 = plVar18; if (*(int *)(param_5 + 0x18) != 0) { plVar8 = *(longlong **)(param_5 + 0x10); } plVar6 = plVar18; if (*(int *)(lVar19 + 0x20) != 0) { plVar6 = *(longlong **)(lVar19 + 0x18); } FUN_140006fb0(plVar6,plVar8,(longlong)iVar2); *(undefined4 *)(*(longlong *)(param_2 + 0x8a) + 0x38) = param_7; if (param_1[0x2fe] != 0) { FUN_140084660(param_1[0x2fe],L"Issuedispose %dclient in %s",(ulonglong)param_2[0x1be],param_6) ; } } uVar13 = (uint)param_1[0x55]; uVar11 = ((ulonglong)param_2 & 0xffffffff) % (ulonglong)uVar13; if (param_1[0x51] != 0) { for (plVar8 = *(longlong **)(param_1[0x51] + uVar11 * 8); (plVar8 != (longlong *)0x0 && ((uint)uVar11 == *(uint *)(plVar8 + 4) % uVar13)); plVar8 = (longlong *)plVar8[2]) { if ((uint *)*plVar8 == param_2) { return (ulonglong)*(uint *)(plVar8 + 4) / (ulonglong)uVar13; } } } if (*(longlong *)(param_2 + 0x8a) == 0) { local_60 = 0; local_58 = 0; local_50 = 0; local_48 = 0; local_68 = Proud::ByteArray::vftable; FUN_140066230((longlong)param_1,param_2,0xc,7,(longlong)&local_68); FUN_140049e40(&local_68); } else { puVar4 = *(uint **)(param_2 + 0x8a); FUN_140066230((longlong)param_1,param_2,(ulonglong)*puVar4,(ulonglong)puVar4[1], (longlong)(puVar4 + 2)); } lVar19 = (**(code **)(param_1[0x23] + 8))(); uVar17 = (ulonglong)(uint)param_1[0x55]; uVar9 = ((ulonglong)param_2 & 0xffffffff) % uVar17; uVar11 = param_1[0x51]; uVar13 = (uint)uVar9; if (uVar11 != 0) { plVar8 = *(longlong **)(uVar11 + uVar9 * 8); while ((plVar8 != (longlong *)0x0 && (ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17), uVar13 == (uint)ppuVar12))) { if ((uint *)*plVar8 == param_2) goto LAB_14006f1fa; plVar8 = (longlong *)plVar8[2]; } if (uVar11 != 0) { plVar8 = *(longlong **)(uVar11 + uVar9 * 8); while ((plVar8 != (longlong *)0x0 && (ppuVar12 = (uint **)((ulonglong)*(uint *)(plVar8 + 4) % uVar17), uVar13 == (uint)ppuVar12))) { if ((uint *)*plVar8 == param_2) goto LAB_14006f1f5; plVar8 = (longlong *)plVar8[2]; } if (uVar11 != 0) goto LAB_14006f1c0; } } uVar7 = FUN_14004c640((longlong)(param_1 + 0x50),(uint)param_1[0x55],'\x01'); if ((char)uVar7 == '\0') { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x8007000e); } LAB_14006f1c0: FUN_1400c8cb0((char *)(param_1 + 0x50)); uVar17 = (ulonglong)param_2 & 0xffffffff; ppuVar12 = &local_res10; plVar8 = FUN_14004e780((char *)(param_1 + 0x50),ppuVar12,uVar13,(int)param_2); FUN_1400c8cb0((char *)(param_1 + 0x50)); uVar11 = uVar9; LAB_14006f1f5: plVar8[1] = lVar19; LAB_14006f1fa: FUN_140043a50(*(longlong **)(*(longlong *)(param_2 + 0x1d2) + 0x110),ppuVar12,uVar11,uVar17); plVar8 = *(longlong **)(param_2 + 0x1d8); if ((plVar8 != (longlong *)0x0) && (*plVar8 != 0)) { plVar6 = plVar18; if (plVar8 != (longlong *)0x0) { plVar6 = (longlong *)*plVar8; } plVar8 = plVar18; if ((undefined8 *)plVar6[0x2a] != (undefined8 *)0x0) { plVar8 = *(longlong **)plVar6[0x2a]; } FUN_140043a50(plVar8,ppuVar12,uVar11,uVar17); } (**(code **)(*(longlong *)(param_2 + 0x28) + 0x40))(); puVar4 = param_2 + 0x12; if (*(longlong *)(param_2 + 0x1a) != 0) { plVar18 = *(longlong **)(param_2 + 0x16); } do { if (plVar18 == (longlong *)0x0) { FUN_1400671e0((char *)puVar4,param_6,uVar11,uVar17); uVar11 = FUN_1400656a0((char *)(param_1 + 0x5b),(longlong)param_2); return uVar11; } if (plVar18 == (longlong *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } local_78 = (ulonglong *)0x0; if (plVar18[1] != 0) { *(longlong *)(plVar18[1] + 8) = *(longlong *)(plVar18[1] + 8) + 1; local_78 = (ulonglong *)plVar18[1]; param_2 = local_res10; } if (local_78 == (ulonglong *)0x0) { puVar10 = (uint *)0x0; } else { puVar10 = (uint *)*local_78; } FUN_140069560((longlong)param_1,puVar10,(ulonglong)param_2[0x1be],0xb); if (local_78 == (ulonglong *)0x0) { uVar11 = 0; } else { uVar11 = *local_78; } if (*(longlong *)(uVar11 + 0x28) == 0) { piVar14 = (int *)0x0; } else { piVar14 = *(int **)(uVar11 + 0x18); } while( true ) { if (local_78 == (ulonglong *)0x0) { uVar9 = 0; } else { uVar9 = *local_78; } if (piVar14 == (int *)0x0) break; if (*piVar14 != 1) { if (local_78 == (ulonglong *)0x0) { uVar9 = 0; } else { uVar9 = *local_78; } (**(code **)(param_1[0x95] + 0x80)) (param_1 + 0x95,*piVar14,&DAT_140177f90,param_2 + 0x1be,uVar9); } piVar14 = *(int **)(piVar14 + 6); } if (uVar11 + 8 != uVar9 + 8) { /* WARNING: Subroutine does not return */ FUN_1400050d0(0x80004005); } if (local_78 == (ulonglong *)0x0) { uVar11 = 0; } else { uVar11 = *local_78; } uVar9 = (ulonglong)param_2[0x1be]; pTVar16 = (TypeDescriptor *)(uVar9 % (ulonglong)*(uint *)(uVar11 + 0x30)); if (*(longlong *)(uVar11 + 0x10) != 0) { puVar10 = *(uint **)(*(longlong *)(uVar11 + 0x10) + (longlong)pTVar16 * 8); while( true ) { if ((puVar10 == (uint *)0x0) || ((uint)pTVar16 != puVar10[10] % *(uint *)(uVar11 + 0x30))) goto LAB_14006f3bb; if (*puVar10 == param_2[0x1be]) break; puVar10 = *(uint **)(puVar10 + 6); } uVar9 = 0; FUN_14008cf20((char *)(uVar11 + 8),puVar10,'\0'); } LAB_14006f3bb: if (local_78 == (ulonglong *)0x0) { uVar11 = 0; } else { uVar11 = *local_78; } if ((*(longlong *)(uVar11 + 0x28) == 0) && ((char)param_1[0x300] == '\0')) { if (local_78 == (ulonglong *)0x0) { puVar10 = (uint *)0x0; } else { puVar10 = (uint *)*local_78; } uVar13 = *puVar10; uVar11 = (ulonglong)(uint)param_1[0x85]; if (param_1[0x81] != 0) { puVar10 = *(uint **)(param_1[0x81] + ((ulonglong)uVar13 % uVar11) * 8); while( true ) { if ((puVar10 == (uint *)0x0) || ((uint)((ulonglong)uVar13 % uVar11) != puVar10[8] % (uint)param_1[0x85])) goto LAB_14006f492; if (*puVar10 == uVar13) break; puVar10 = *(uint **)(puVar10 + 4); } FUN_140065fe0((char *)(param_1 + 0x80),puVar10,0); plVar8 = (longlong *)param_1[0x8f]; lVar19 = *plVar8; uVar7 = (**(code **)(param_1[0x23] + 8))(); SVar15 = (SIZE_T)uVar13; (**(code **)(lVar19 + 0x10))(plVar8,uVar7); FUN_14006c700(param_1,uVar13,SVar15,uVar11); } } else { if (local_78 == (ulonglong *)0x0) { puVar10 = (uint *)0x0; } else { puVar10 = (uint *)*local_78; } FUN_140059c20((longlong)param_1,puVar10,uVar9,pTVar16); } LAB_14006f492: if (local_78 == (ulonglong *)0x0) { uVar11 = 0; } else { uVar11 = *local_78; } uVar17 = 1; param_6 = (LPVOID)(ulonglong)param_2[0x96]; FUN_140037f20((longlong)(param_2 + 0x90),param_2[0x96],uVar11,1); if (local_78 != (ulonglong *)0x0) { puVar1 = local_78 + 1; *puVar1 = *puVar1 - 1; param_2 = local_res10; if (*puVar1 == 0) { pvVar5 = (LPVOID)*local_78; if (pvVar5 != (LPVOID)0x0) { FUN_1400519b0((longlong)pvVar5,param_6,uVar11,uVar17); FUN_14003e8b0(pvVar5); } FUN_14003e8b0(local_78); param_2 = local_res10; } } if (plVar18 != (longlong *)0x0) { plVar18 = (longlong *)plVar18[2]; } } while( true ); }