/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400acd80 FUN_1400acd80 * Pseudocode, not original source. */ void FUN_1400acd80(longlong *param_1,int *param_2,byte *param_3,byte *param_4,int *param_5, int *param_6) { byte bVar1; int iVar2; uint uVar3; longlong lVar4; ulonglong uVar5; undefined8 *puVar6; undefined8 uVar7; undefined8 *puVar8; undefined8 *puVar9; uint *puVar10; int *piVar11; longlong *plVar12; uint uVar13; uint uVar14; undefined4 *puVar15; undefined4 *puVar16; uint *puVar17; uint uVar18; ulonglong *puVar20; IMAGE_DOS_HEADER *pIVar21; uint *puVar22; uint uVar23; size_t sVar24; byte *pbVar25; byte *pbVar26; uint **ppuVar27; undefined8 *local_res10; byte *local_res18; byte *local_res20; undefined8 in_stack_fffffffffffffdd8; undefined4 uVar28; uint *local_218; uint *local_210; int local_208; undefined8 local_200; uint local_1f8; undefined8 local_1e8; undefined8 local_1e0; undefined8 *local_1d8; undefined8 local_1d0; undefined8 local_1c8; longlong local_1b0; byte *local_188; undefined1 local_180; uint *local_178; ulonglong local_170; longlong local_168; longlong local_160; longlong local_158; undefined **local_150; undefined8 local_148; undefined8 local_140; undefined8 local_138; undefined8 local_130; undefined **local_128; undefined8 local_120; undefined8 local_118; undefined8 local_110; undefined8 local_108; undefined **local_100; undefined8 local_f8; undefined8 local_f0; undefined8 local_e8; undefined8 local_e0; undefined8 local_c8; undefined8 **ppuVar19; uVar28 = (undefined4)((ulonglong)in_stack_fffffffffffffdd8 >> 0x20); local_c8 = 0xfffffffffffffffe; iVar2 = *param_2; local_res18 = param_3; local_res20 = param_4; if (iVar2 != 0) { if (iVar2 == 1) { puVar22 = (uint *)(param_2 + 2); local_1f8 = (int)(*puVar22 + ((int)*puVar22 >> 0x1f & 7U)) >> 3; local_res10 = (undefined8 *)((ulonglong)local_res10 & 0xffffffffffffff00); pbVar25 = param_3; pbVar26 = param_4; local_218 = puVar22; local_188 = (byte *)FUN_1400a8e20(param_1,param_2[0xc],param_3,param_4); (**(code **)(param_1[0xf] + 0x18))(); iVar2 = 0; local_200 = (int *)((ulonglong)local_200._4_4_ << 0x20); puVar10 = (uint *)&local_200; puVar17 = puVar22; local_178 = puVar22; uVar7 = FUN_140075890(puVar22,puVar10,pbVar25,pbVar26); if ((char)uVar7 != '\0') { for (; local_208 = iVar2, iVar2 < (int)param_1[9]; iVar2 = iVar2 + 1) { if ((iVar2 < 0) || ((int)param_1[9] <= iVar2)) { /* WARNING: Subroutine does not return */ FUN_14003def0(puVar17,puVar10,pbVar25,pbVar26); } plVar12 = *(longlong **)(param_1[8] + (longlong)iVar2 * 8); FUN_140074bb0((int *)local_178,(ulonglong)local_1f8,pbVar25,pbVar26); *(undefined2 *)(plVar12 + 1) = 0; puVar10 = puVar22; pbVar25 = local_188; bVar1 = (**(code **)(*plVar12 + 0x10))(plVar12); local_res10 = (undefined8 *)CONCAT71(local_res10._1_7_,(byte)local_res10 | bVar1); *param_3 = *param_3 | *(byte *)(plVar12 + 1); puVar17 = (uint *)(ulonglong)*(byte *)((longlong)plVar12 + 9); *param_4 = *param_4 | *(byte *)((longlong)plVar12 + 9); if (((bVar1 != 0) && (plVar12 != param_1 + 0x307)) && (plVar12 != param_1 + 0x2fe)) { *param_5 = *param_5 + 1; } } if ((byte)local_res10 != '\0') { return; } } FUN_140074bb0((int *)local_178,(ulonglong)local_1f8,pbVar25,pbVar26); if (param_1[0x2b0] == 0) { return; } *param_6 = *param_6 + 1; (**(code **)(*(longlong *)param_1[0x2b0] + 0x28)) ((longlong *)param_1[0x2b0],(ulonglong)local_200 & 0xffffffff); return; } if (iVar2 != 2) { return; } puVar22 = (uint *)(param_2 + 2); pbVar25 = param_3; pbVar26 = param_4; local_218 = puVar22; lVar4 = FUN_1400a8e20(param_1,param_2[0xc],param_3,param_4); (**(code **)(param_1[0xf] + 0x18))(); if (param_1[0x2b0] == 0) { return; } ppuVar19 = &local_res10; uVar5 = FUN_140075580(puVar22,ppuVar19,pbVar25,pbVar26); if ((char)uVar5 != '\0') { uVar3 = *puVar22; uVar18 = (int)uVar3 >> 0x1f & 7; ppuVar19 = (undefined8 **)(ulonglong)uVar18; iVar2 = FUN_14004d230((longlong)puVar22,ppuVar19,pbVar25,pbVar26); if ((int)local_res10 == iVar2 - ((int)(uVar18 + uVar3) >> 3)) { *(undefined1 *)(param_1[0x2b0] + 8) = 0; *(undefined1 *)(param_1[0x2b0] + 9) = 0; FUN_140049b40((undefined1 *)&local_1e8); local_1e8 = (undefined **)CONCAT44(param_2[0xc],(undefined4)local_1e8); local_1e8 = (undefined **)CONCAT71(local_1e8._1_7_,(char)param_2[0x12]); uVar3 = *puVar22; uVar18 = (int)uVar3 >> 0x1f & 7; local_1b0 = lVar4; lVar4 = FUN_140074b70((longlong)puVar22,(ulonglong)uVar18,pbVar25,pbVar26); (**(code **)(*(longlong *)param_1[0x2b0] + 0x30)) ((longlong *)param_1[0x2b0],param_2[0xc],&local_1e8, lVar4 + ((int)(uVar3 + uVar18) >> 3),CONCAT44(uVar28,(int)local_res10)); *param_3 = *param_3 | *(byte *)(param_1[0x2b0] + 8); *param_4 = *param_4 | *(byte *)(param_1[0x2b0] + 9); *param_5 = *param_5 + 1; return; } } local_188 = (byte *)FUN_14003e840(0x60); if (local_188 == (byte *)0x0) { puVar6 = (undefined8 *)0x0; } else { puVar6 = FUN_140071b80((undefined8 *)local_188,ppuVar19,pbVar25,pbVar26); } puVar16 = (undefined4 *)0x0; FUN_140038300((longlong *)&local_res10,(longlong)puVar6,pbVar25,pbVar26); puVar15 = puVar16; if (local_res10 != (undefined8 *)0x0) { puVar15 = (undefined4 *)local_res10[7]; } *puVar15 = 0x1f; if (local_res10 != (undefined8 *)0x0) { puVar16 = (undefined4 *)local_res10[7]; } FUN_140005dd0((longlong *)(puVar16 + 4),L"Invalid payload size in User Message!",pbVar25,pbVar26 ); local_170 = 0; FUN_14005d770(&local_170,(ulonglong *)&local_res10,pbVar25,pbVar26); puVar20 = &local_170; (**(code **)(*param_1 + 0x80))(param_1); FUN_140038280((longlong *)&local_res10,puVar20,pbVar25,pbVar26); return; } pbVar25 = param_3; pbVar26 = param_4; (**(code **)(param_1[0xf] + 0x18))(); if (param_1[0x2b0] == 0) { return; } local_200 = param_2 + 0x14; *(undefined1 *)(param_1[0x2b0] + 8) = 0; *(undefined1 *)(param_1[0x2b0] + 9) = 0; uVar3 = *local_200 - 1; if (0x14 < uVar3) { return; } pIVar21 = &IMAGE_DOS_HEADER_140000000; switch(*local_200) { case 1: iVar2 = FUN_14004d1c0((longlong *)(param_2 + 0x28),&IMAGE_DOS_HEADER_140000000,pbVar25,pbVar26); sVar24 = (size_t)iVar2; puVar8 = (undefined8 *)FUN_14004d1f0((longlong *)(param_2 + 0x28),pIVar21,pbVar25,pbVar26); local_1e8 = Proud::CFastArray::vftable; puVar6 = (undefined8 *)0x0; local_1e0 = 0; local_1d8 = (undefined8 *)0x0; local_1d0 = 0; local_1c8 = 0; if (iVar2 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } FUN_14002a050((longlong)&local_1e8,iVar2,(SIZE_T)pbVar25); puVar9 = local_1d8; if ((int)local_1d0 == 0) { puVar9 = puVar6; } FUN_140006fb0(puVar9,puVar8,sVar24); local_1e8 = Proud::ByteArray::vftable; local_res10 = (undefined8 *)FUN_14003e840(0x60); puVar9 = puVar6; if (local_res10 != (undefined8 *)0x0) { puVar9 = FUN_140071b80(local_res10,puVar8,sVar24,pbVar26); } plVar12 = FUN_140038300(&local_158,(longlong)puVar9,sVar24,pbVar26); if (*plVar12 != 0) { puVar6 = *(undefined8 **)(*plVar12 + 0x38); } puVar8 = &local_1e8; (**(code **)(*(longlong *)param_1[0x2b0] + 0x38))(); FUN_140038280(&local_158,puVar6,puVar8,pbVar26); FUN_140049e40(&local_1e8); break; case 2: FUN_14003e7c0(IMAGE_DOS_HEADER_140000000.e_magic + (&switchD_1400ad16b::switchdataD_1400ad88c)[(int)uVar3], &IMAGE_DOS_HEADER_140000000,pbVar25,pbVar26); local_210 = (uint *)PTR_DAT_14016f010; uVar18 = FUN_14003e620(&DAT_140131724); local_res10 = (undefined8 *)CONCAT44(local_res10._4_4_,uVar18); puVar22 = (uint *)0x0; uVar23 = 0; uVar3 = uVar23; if ((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar3 = local_210[-2]; } uVar13 = uVar18; if ((((int)uVar18 <= (int)uVar3) && (uVar13 = uVar23, local_210 != (uint *)0x0)) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar13 = local_210[-2]; } uVar3 = 1; if (1 < (int)uVar13) { uVar3 = uVar13; } uVar13 = uVar23; if ((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar13 = local_210[-2]; } uVar14 = 0; if ((int)uVar13 < (int)uVar3) { if (local_210 == (uint *)0x0) { local_210 = (uint *)PTR_DAT_14016f010; } if ((int)uVar3 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (uVar3 == 0) { FUN_140002190((longlong *)&local_210,PTR_DAT_14016f010,pbVar25,pbVar26); } else { uVar13 = uVar14; if ((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar13 = local_210[-2]; } if (uVar3 != uVar13) { puVar10 = (uint *)FUN_14003e840((longlong)(int)uVar3 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar3; uVar18 = uVar14; if ((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar18 = local_210[-2]; } puVar17 = (uint *)PTR_DAT_14016f010; if ((int)uVar3 < (int)uVar18) { LAB_1400ad374: if (local_210 != (uint *)0x0) { puVar17 = local_210; } } else { uVar3 = uVar23; if (local_210 != (uint *)0x0) { if (local_210 != (uint *)PTR_DAT_14016f010) { uVar3 = local_210[-2]; } goto LAB_1400ad374; } } uVar5 = (ulonglong)uVar3; FUN_14003e650(puVar10 + 2,puVar17,uVar3); FUN_140002190((longlong *)&local_210,puVar17,uVar5,pbVar26); uVar18 = (uint)local_res10; local_210 = puVar10 + 2; } } } FUN_140001df0((longlong *)&local_210); puVar10 = local_210; if (local_210 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_14016f010; } FUN_14003e650(puVar10,&DAT_140131724,uVar18); puVar10 = local_210; if (local_210 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_14016f010; } uVar18 = FUN_14003e620((short *)puVar10); uVar3 = 0; if (0 < (int)uVar18) { uVar3 = uVar18; } uVar18 = uVar14; if ((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) { uVar18 = local_210[-2]; } if (((int)uVar3 < (int)uVar18) || (uVar3 = uVar14, local_210 == (uint *)0x0)) { LAB_1400ad418: if (((local_210 != (uint *)PTR_DAT_14016f010) && (local_210 != (uint *)0x0)) && (local_210 + -2 != (uint *)0x0)) { local_210[-2] = uVar3; *(undefined2 *)((longlong)local_210 + (longlong)(int)uVar3 * 2) = 0; } } else if (local_210 != (uint *)PTR_DAT_14016f010) { uVar3 = local_210[-2]; goto LAB_1400ad418; } local_120 = 0; local_118 = 0; local_110 = 0; local_108 = 0; local_128 = Proud::ByteArray::vftable; puVar10 = puVar22; if (*(longlong *)(param_2 + 0x16) != 0) { puVar10 = *(uint **)(*(longlong *)(param_2 + 0x16) + 0x38); } ppuVar27 = &local_210; uVar7 = 1; uVar5 = (ulonglong)*puVar10; FUN_140071c20((longlong *)&local_218,uVar5,1,(longlong *)ppuVar27,(longlong)&local_128); FUN_140049e40(&local_128); puVar10 = local_210; if (((local_210 != (uint *)0x0) && (local_210 != (uint *)PTR_DAT_14016f010)) && (puVar17 = local_210 + -2, puVar17 != (uint *)0x0)) { piVar11 = (int *)FUN_14003e7c0(PTR_DAT_14016f010,uVar5,uVar7,ppuVar27); local_180 = 0; local_188 = (byte *)piVar11; FUN_14003d040(piVar11); local_180 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14003e8b0(puVar17); } FUN_14003d0d0((longlong)piVar11); param_3 = local_res18; } local_210 = (uint *)PTR_DAT_14016f010; puVar10 = puVar22; if (local_218 != (uint *)0x0) { puVar10 = *(uint **)(local_218 + 0xe); } puVar10[8] = param_2[0x40]; *(short *)(puVar10 + 9) = (short)param_2[0x41]; puVar10 = puVar22; if (local_218 != (uint *)0x0) { puVar10 = *(uint **)(local_218 + 0xe); } puVar10[2] = param_2[0x42]; local_1e0 = 0; local_1d8 = (undefined8 *)0x0; local_1d0 = 0; local_1c8 = 0; local_1e8 = Proud::ByteArray::vftable; if (*(longlong *)(param_2 + 0x28) != 0) { uVar3 = *(uint *)(*(longlong *)(param_2 + 0x28) + 0x18); LAB_1400ad5eb: if (0 < (int)uVar3) { /* WARNING: Subroutine does not return */ FUN_14003def0((ulonglong)uVar3,uVar5,uVar7,ppuVar27); } /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (*(longlong *)(param_2 + 0x2a) != 0) { if (*(longlong *)(param_2 + 0x2a) == 0) { /* WARNING: Subroutine does not return */ FUN_14008a420(puVar10,uVar5,uVar7,ppuVar27); } uVar3 = param_2[0x2c]; goto LAB_1400ad5eb; } if (local_218 != (uint *)0x0) { puVar22 = *(uint **)(local_218 + 0xe); } puVar6 = &local_1e8; (**(code **)(*(longlong *)param_1[0x2b0] + 0x38))(); FUN_140049e40(&local_1e8); FUN_140038280((longlong *)&local_218,puVar22,puVar6,ppuVar27); break; case 3: uVar7 = 0; if (*(longlong *)(param_2 + 0x16) != 0) { uVar7 = *(undefined8 *)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x40))((longlong *)param_1[0x2b0],uVar7); break; default: goto switchD_1400ad16b_caseD_4; case 8: (**(code **)(*(longlong *)param_1[0x2b0] + 0x48)) ((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c],param_2 + 0x32); break; case 9: (**(code **)(*(longlong *)param_1[0x2b0] + 0x50)) ((longlong *)param_1[0x2b0],param_2[0x2f],param_2[0x2e],param_2[0x3c]); FUN_1400a8c10(param_1,param_2[0x2f]); break; case 10: (**(code **)(*(longlong *)param_1[0x2b0] + 0x58))((longlong *)param_1[0x2b0],param_2[0x30],0); break; case 0xb: puVar16 = (undefined4 *)0x0; if (*(longlong *)(param_2 + 0x16) != 0) { puVar16 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x58)) ((longlong *)param_1[0x2b0],param_2[0x30],*puVar16); break; case 0xd: if (param_1[0x2b0] != 0) { puVar16 = (undefined4 *)0x0; if (*(longlong *)(param_2 + 0x16) != 0) { puVar16 = *(undefined4 **)(*(longlong *)(param_2 + 0x16) + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x60))((longlong *)param_1[0x2b0],*puVar16); } break; case 0xe: (**(code **)(*(longlong *)param_1[0x2b0] + 0x68))(); break; case 0x14: puVar22 = (uint *)0x0; local_f8 = 0; local_f0 = 0; local_e8 = 0; local_e0 = 0; local_100 = Proud::ByteArray::vftable; lVar4 = *(longlong *)(param_2 + 0x16); puVar17 = puVar22; puVar10 = puVar22; if (lVar4 != 0) { puVar17 = *(uint **)(lVar4 + 0x38); puVar10 = *(uint **)(lVar4 + 0x38); } puVar10 = puVar10 + 4; uVar5 = (ulonglong)(uint)param_2[0x30]; plVar12 = FUN_140071c20(&local_160,(ulonglong)*puVar17,uVar5,(longlong *)puVar10, (longlong)&local_100); if (*plVar12 != 0) { puVar22 = *(uint **)(*plVar12 + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 8))(); FUN_140038280(&local_160,puVar22,uVar5,puVar10); FUN_140049e40(&local_100); break; case 0x15: puVar22 = (uint *)0x0; local_148 = 0; local_140 = 0; local_138 = 0; local_130 = 0; local_150 = Proud::ByteArray::vftable; lVar4 = *(longlong *)(param_2 + 0x16); puVar17 = puVar22; puVar10 = puVar22; if (lVar4 != 0) { puVar17 = *(uint **)(lVar4 + 0x38); puVar10 = *(uint **)(lVar4 + 0x38); } puVar10 = puVar10 + 4; uVar5 = (ulonglong)(uint)param_2[0x30]; plVar12 = FUN_140071c20(&local_168,(ulonglong)*puVar17,uVar5,(longlong *)puVar10, (longlong)&local_150); if (*plVar12 != 0) { puVar22 = *(uint **)(*plVar12 + 0x38); } (**(code **)(*(longlong *)param_1[0x2b0] + 0x10))(); FUN_140038280(&local_168,puVar22,uVar5,puVar10); FUN_140049e40(&local_150); } *param_3 = *(byte *)(param_1[0x2b0] + 8); *param_4 = *(byte *)(param_1[0x2b0] + 9); *param_6 = *param_6 + 1; switchD_1400ad16b_caseD_4: return; }