/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400c6270 FUN_1400c6270 * Pseudocode, not original source. */ undefined8 FUN_1400c6270(IMAGE_DOS_HEADER *param_1,IMAGE_DOS_HEADER *param_2,IMAGE_DOS_HEADER *param_3, undefined ***param_4) { undefined8 *puVar1; int *piVar2; char cVar3; uint uVar4; uint uVar5; int iVar6; undefined8 uVar7; longlong *plVar8; int *piVar9; ulonglong uVar10; IMAGE_DOS_HEADER *pIVar11; undefined8 *puVar12; undefined8 *puVar13; uint uVar14; IMAGE_DOS_HEADER *pIVar15; undefined *puVar16; IMAGE_DOS_HEADER *pIVar17; wchar_t *pwVar18; longlong lVar19; undefined8 **ppuVar20; undefined8 *local_res8; IMAGE_DOS_HEADER *local_res10; uint local_res18; undefined8 *local_res20; undefined1 local_78 [16]; undefined8 *local_68; undefined8 local_60; undefined8 local_58; word local_50 [4]; undefined **local_48; word local_40 [2]; undefined2 local_3c; byte local_38; pIVar17 = param_3; local_res10 = param_2; (**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x78) + 0x10))(); uVar4 = (int)(*(int *)param_3 + (*(int *)param_3 >> 0x1f & 7U)) >> 3; local_res20 = (undefined8 *)CONCAT44(local_res20._4_4_,uVar4); pIVar15 = (IMAGE_DOS_HEADER *)&local_res18; pIVar11 = param_3; uVar7 = FUN_140075810((uint *)param_3,(uint *)pIVar15,pIVar17,param_4); if ((char)uVar7 == '\0') goto LAB_1400c6860; cVar3 = '\0'; local_res8 = (undefined8 *)((ulonglong)local_res8 & 0xffffffffffffff00); if (0x27 < local_res18 - 1) goto switchD_1400c62f3_caseD_5; pIVar15 = &IMAGE_DOS_HEADER_140000000; pIVar11 = (IMAGE_DOS_HEADER *) (IMAGE_DOS_HEADER_140000000.e_magic + (&switchD_1400c62f3::switchdataD_1400c6878)[(int)(local_res18 - 1)]); switch(local_res18) { case 1: pIVar17 = (IMAGE_DOS_HEADER *)&local_res8; pIVar11 = param_1; pIVar15 = param_3; FUN_1400c5bf0((longlong)param_1,(int *)param_3,(byte *)pIVar17,param_4); cVar3 = (char)local_res8; goto switchD_1400c62f3_caseD_5; case 2: pIVar17 = (IMAGE_DOS_HEADER *)&local_res8; pIVar11 = param_1; pIVar15 = param_3; FUN_1400c5f70((longlong)param_1,(int *)param_3,(SIZE_T)pIVar17,param_4); goto switchD_1400c62f3_caseD_5; case 3: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf340((longlong)param_1,param_3,pIVar17,param_4); } break; case 4: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c27c0((longlong *)param_1,(uint *)param_3,pIVar17,param_4); } break; default: goto switchD_1400c62f3_caseD_5; case 6: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c3190((longlong)param_1,param_3,(SIZE_T)pIVar17,param_4); } break; case 8: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf3b0((longlong)param_1,param_3,pIVar17,param_4); } break; case 9: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf420((longlong)param_1,param_3,pIVar17,param_4); } break; case 10: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c50f0((longlong)param_1,(uint *)param_3,(SIZE_T)pIVar17,(undefined4 *)param_4); } break; case 0xb: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf2c0((longlong)param_1,(uint *)param_3); } break; case 0xd: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c0d50((longlong)param_1,(uint *)param_3,pIVar17,(longlong)param_4); } break; case 0xf: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c4e50((longlong)param_1,(uint *)param_3,pIVar17,(ulonglong)param_4); } break; case 0x11: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c0010((longlong)param_1,(uint *)param_3,pIVar17,param_4); } break; case 0x13: pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c3510((undefined ***)param_1,(uint *)local_res10,(uint *)param_3,param_4); break; case 0x17: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c3920((undefined ***)param_1,(uint *)param_3,pIVar17,param_4); } break; case 0x18: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c0180(param_1,local_res10,(uint *)param_3,param_4); } break; case 0x19: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c3ef0((undefined ***)param_1,(longlong *)local_res10,(uint *)param_3,param_4); } break; case 0x1c: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = param_3; FUN_1400c5a20((longlong)param_1,(uint *)param_3,pIVar17,param_4); } break; case 0x1d: break; case 0x1e: pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf100((longlong)param_1,(uint *)param_3,pIVar17,param_4); break; case 0x1f: pIVar11 = param_1; pIVar15 = param_3; FUN_1400bf140((longlong)param_1,(uint *)param_3,pIVar17,param_4); break; case 0x20: pIVar11 = param_1; pIVar15 = param_3; FUN_1400c1a10((longlong)param_1,(uint *)param_3,pIVar17,param_4); break; case 0x21: pIVar11 = param_1; pIVar15 = param_3; FUN_1400c0620((longlong)param_1,(uint *)param_3); break; case 0x22: if ((*(int *)param_3->e_res2_10_ == 1) || (*(int *)param_3->e_res2_10_ == 0)) { pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c2230((longlong)param_1,local_res10,(uint *)param_3,param_4); } break; case 0x23: pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c1080(param_1,local_res10,(uint *)param_3,param_4); break; case 0x24: case 0x25: FUN_140074fb0((undefined4 *)local_78); local_48 = Proud::AddrPort::vftable; local_38 = 0; local_50[0] = 0; local_50[1] = 0; local_40[0] = (word)DAT_14016f3d0; local_40[1] = DAT_14016f3d0._2_2_; local_3c = DAT_14016f3d4; param_4 = (undefined ***)local_78; pIVar15 = (IMAGE_DOS_HEADER *)(ulonglong)local_res18; pIVar17 = param_3; uVar7 = FUN_140078bb0(*(uint **)¶m_1[2].e_cparhdr,local_res18,(uint *)param_3, (uint *)param_4); if ((char)uVar7 != '\0') { local_38 = param_3->e_program[0]; local_40 = *(word (*) [2])(param_3->e_res2_10_ + 8); local_3c = (undefined2)param_3->e_lfanew; local_50._0_4_ = *(undefined4 *)param_3->e_res2_10_; pIVar17 = (IMAGE_DOS_HEADER *)local_78; pIVar15 = local_res10; uVar7 = FUN_1400c6270(param_1,local_res10,pIVar17,param_4); cVar3 = (char)uVar7; } local_res8 = (undefined8 *)(local_78 + 8); pIVar11 = (IMAGE_DOS_HEADER *)(local_78 + 8); FUN_14008a320((longlong *)pIVar11); if ((local_68 != (undefined8 *)0x0) && (local_60._4_4_ < 0)) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } goto switchD_1400c62f3_caseD_5; case 0x26: FUN_140074fb0((undefined4 *)local_78); local_48 = Proud::AddrPort::vftable; local_38 = 0; local_50[0] = 0; local_50[1] = 0; local_40[0] = (word)DAT_14016f3d0; local_40[1] = DAT_14016f3d0._2_2_; local_3c = DAT_14016f3d4; pIVar17 = (IMAGE_DOS_HEADER *)local_78; pIVar15 = param_3; uVar7 = FUN_140076fe0(*(longlong **)¶m_1[2].e_cparhdr,(uint *)param_3,(int *)pIVar17, (ulonglong)param_4); if ((char)uVar7 != '\0') { local_38 = param_3->e_program[0]; local_40 = *(word (*) [2])(param_3->e_res2_10_ + 8); local_3c = (undefined2)param_3->e_lfanew; local_50._0_4_ = *(undefined4 *)param_3->e_res2_10_; pIVar17 = (IMAGE_DOS_HEADER *)local_78; pIVar15 = local_res10; uVar7 = FUN_1400c6270(param_1,local_res10,pIVar17,param_4); cVar3 = (char)uVar7; } local_res8 = (undefined8 *)(local_78 + 8); pIVar11 = (IMAGE_DOS_HEADER *)(local_78 + 8); FUN_14008a320((longlong *)pIVar11); if ((local_68 != (undefined8 *)0x0) && (local_60._4_4_ < 0)) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } goto switchD_1400c62f3_caseD_5; case 0x27: pIVar11 = param_1; pIVar15 = local_res10; pIVar17 = param_3; FUN_1400c1cc0((longlong)param_1,(SIZE_T)local_res10,(longlong)param_3,param_4); break; case 0x28: pIVar11 = param_1; pIVar15 = param_3; FUN_1400c0790((longlong)param_1,(uint *)param_3); } cVar3 = '\x01'; switchD_1400c62f3_caseD_5: if (*(longlong *)¶m_3->e_cparhdr == 0) { lVar19._0_2_ = param_3->e_sp; lVar19._2_2_ = param_3->e_csum; lVar19._4_2_ = param_3->e_ip; lVar19._6_2_ = param_3->e_cs; if (lVar19 == 0) { /* WARNING: Subroutine does not return */ FUN_14008a420(pIVar11,pIVar15,pIVar17,param_4); } uVar4._0_2_ = param_3->e_lfarlc; uVar4._2_2_ = param_3->e_ovno; } else { uVar4 = *(uint *)(*(longlong *)¶m_3->e_cparhdr + 0x18); } uVar14 = *(int *)param_3 >> 0x1f & 7; uVar5 = (int)(*(int *)param_3 + uVar14) >> 3; puVar12 = (undefined8 *)(ulonglong)uVar5; if (cVar3 == '\x01') { if (((uVar4 != uVar5) && (puVar12 = (undefined8 *)(ulonglong)local_res18, local_res18 != 0x24)) && (local_res18 != 0x25)) { FUN_14003e7c0((ulonglong)uVar4,(ulonglong)uVar14,pIVar17,param_4); local_res8 = (undefined8 *)PTR_DAT_14016f010; uVar10 = (ulonglong)local_res18; pwVar18 = L"Proud::CNetClientWorker::ProcessMessage_ProudNetLayer"; puVar16 = &DAT_140124018; FUN_140029b80((longlong *)&local_res8,L"%sμœ„μΉ˜μ—μ„œ MessageType:%d", L"Proud::CNetClientWorker::ProcessMessage_ProudNetLayer",uVar10); iVar6 = FUN_14004d230((longlong)param_3,puVar16,pwVar18,uVar10); local_res20 = (undefined8 *)FUN_140074b70((longlong)param_3,puVar16,pwVar18,uVar10); local_78._0_8_ = Proud::CFastArray::vftable; local_78._8_2_ = 0; local_78._10_2_ = 0; local_78._12_2_ = 0; local_78._14_2_ = 0; local_68 = (undefined8 *)0x0; local_60._0_2_ = 0; local_60._2_2_ = 0; local_60._4_2_ = 0; local_60._6_2_ = 0; local_58._0_2_ = 0; local_58._2_2_ = 0; local_58._4_2_ = 0; local_58._6_2_ = 0; if (iVar6 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } FUN_14002a050((longlong)local_78,iVar6,(SIZE_T)pwVar18); puVar12 = local_68; if ((int)local_60 == 0) { puVar12 = (undefined8 *)0x0; } FUN_140006fb0(puVar12,local_res20,(longlong)iVar6); local_78._0_8_ = Proud::ByteArray::vftable; ppuVar20 = &local_res8; plVar8 = FUN_140071c20((longlong *)&local_res20,0x1f,(ulonglong)*(uint *)param_3->e_res2_10_, (longlong *)ppuVar20,(longlong)local_78); lVar19 = **(longlong **)¶m_1[2].e_cparhdr; (**(code **)(lVar19 + 0x80))(); puVar13 = (undefined8 *)local_78; FUN_140049e40(puVar13); puVar12 = local_res8; if (((local_res8 != (undefined8 *)0x0) && (local_res8 != (undefined8 *)PTR_DAT_14016f010)) && (puVar1 = local_res8 + -1, puVar1 != (undefined8 *)0x0)) { piVar9 = (int *)FUN_14003e7c0(puVar13,plVar8,lVar19,ppuVar20); FUN_14003d040(piVar9); piVar2 = (int *)((longlong)puVar12 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14003e8b0(puVar1); } puVar12 = (undefined8 *)FUN_14003d0d0((longlong)piVar9); } } } else if (cVar3 == '\0') { uVar4 = (uint)local_res20; LAB_1400c6860: uVar10 = FUN_140074bb0((int *)param_3,(ulonglong)uVar4,pIVar17,param_4); return uVar10 & 0xffffffffffffff00; } return CONCAT71((int7)((ulonglong)puVar12 >> 8),1); }