/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400aaf80 FUN_1400aaf80 * Pseudocode, not original source. */ void FUN_1400aaf80(IMAGE_DOS_HEADER *param_1,IMAGE_DOS_HEADER *param_2,undefined **param_3, undefined ***param_4) { undefined **ppuVar1; int *piVar2; longlong *plVar3; longlong lVar4; char cVar5; IMAGE_DOS_HEADER *pIVar6; undefined8 uVar7; undefined **ppuVar8; IMAGE_DOS_HEADER *pIVar9; int *piVar10; undefined ***pppuVar11; int iVar12; undefined **ppuVar13; longlong lVar14; uint local_res8 [2]; undefined **local_res10; longlong local_e8; undefined **local_e0; undefined4 local_d8; undefined2 local_d4; undefined **local_d0; undefined8 local_c8; longlong local_c0; undefined8 local_b8; undefined4 local_b0; undefined4 local_ac; undefined **local_a8; undefined4 local_a0; undefined2 local_9c; undefined **local_98; undefined4 local_90; word local_8c; undefined **local_88; word local_80 [2]; word local_7c; undefined **local_78; word local_70 [2]; word local_6c; int *local_68; undefined1 local_60; byte local_58 [32]; local_58[0] = 0xfe; local_58[1] = 0xff; local_58[2] = 0xff; local_58[3] = 0xff; local_58[4] = 0xff; local_58[5] = 0xff; local_58[6] = 0xff; local_58[7] = 0xff; pIVar6 = param_2; ppuVar13 = param_3; (**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x78) + 0x10))(); param_2[1].e_program[0] = 0; if ((*(double *)(param_2[2].e_program + 8) == 0.0) && (0 < *(int *)(param_3 + 1))) { lVar14 = (**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x70) + 0x1c0))(); plVar3 = (longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x678); *plVar3 = *plVar3 + 1; lVar4 = *(longlong *)¶m_1[2].e_cparhdr; plVar3 = (longlong *)(lVar4 + 0x680); *plVar3 = *plVar3 + (longlong)*(int *)(param_3 + 1); local_e0 = Proud::AddrPort::vftable; pIVar9 = (IMAGE_DOS_HEADER *)0x0; local_d8 = 0; local_d4 = 0; local_e8 = 0; FUN_140030200(lVar4,pIVar6,ppuVar13,param_4); local_res10 = (undefined **)PTR_DAT_140155010; local_78 = Proud::AddrPort::vftable; local_80 = *(word (*) [2])(param_3 + 6); local_7c = *(word *)((longlong)param_3 + 0x34); local_88 = Proud::AddrPort::vftable; pIVar6 = pIVar9; if (*(undefined8 **)(param_2 + 2) != (undefined8 *)0x0) { pIVar6 = (IMAGE_DOS_HEADER *)**(undefined8 **)(param_2 + 2); } pppuVar11 = *(undefined ****)¶m_2[3].e_cparhdr; local_70 = local_80; local_6c = local_7c; cVar5 = (**(code **)(**(longlong **)¶m_1[2].e_cparhdr + 0xe0)) (*(longlong **)¶m_1[2].e_cparhdr,&local_78); pIVar6 = (IMAGE_DOS_HEADER *)FUN_140035710((longlong)pIVar6); param_4 = &local_88; ppuVar13 = (undefined **)(ulonglong)*(uint *)(param_3 + 1); uVar7 = FUN_14009a550(pppuVar11,(longlong)pIVar6,*(uint *)(param_3 + 1),(longlong)param_4,cVar5, lVar14,&local_e8,(longlong *)&local_res10); if ((int)uVar7 == 0) { local_c8 = 0; local_c0 = 0; local_b8 = 0; local_d0 = Proud::CReceivedMessageList::vftable; local_b0 = 1000; local_ac = 1; local_a8 = Proud::AddrPort::vftable; local_a0 = local_d8; local_9c = local_d4; ppuVar13 = (undefined **)(ulonglong)*(uint *)(local_e8 + 0x40); pIVar6 = pIVar9; if (*(uint *)(local_e8 + 0x40) != 0) { pIVar6 = *(IMAGE_DOS_HEADER **)(local_e8 + 0x38); } param_4 = &local_a8; pppuVar11 = *(undefined ****)¶m_1[2].e_cparhdr; FUN_140074030(pppuVar11,(longlong)pIVar6,ppuVar13,(longlong)param_4,(uint *)&local_d0, local_res8); while (iVar12 = (int)pIVar9, iVar12 != (int)local_b8) { if ((iVar12 < 0) || ((int)local_b8 <= iVar12)) { /* WARNING: Subroutine does not return */ FUN_14002f5c0(pppuVar11,pIVar6,ppuVar13,param_4); } pIVar6 = (IMAGE_DOS_HEADER *)(local_c0 + (longlong)iVar12 * 0x48); lVar4 = *(longlong *)¶m_1[2].e_cparhdr; param_4 = (undefined ***)0x0; ppuVar13 = *(undefined ***)(lVar4 + 0x6f0); ppuVar8 = (undefined **) FUN_1400a6640((longlong *)(lVar4 + 0x6e0),(undefined4 *)pIVar6,ppuVar13,0); pppuVar11 = *(undefined ****)(lVar4 + 0x6f0); if (pppuVar11 == (undefined ***)0x0) { *(undefined ***)(lVar4 + 0x6e8) = ppuVar8; } else { *pppuVar11 = ppuVar8; } *(undefined ***)(lVar4 + 0x6f0) = ppuVar8; if ((int)local_b8 <= iVar12) { /* WARNING: Subroutine does not return */ FUN_14002f5c0(pppuVar11,pIVar6,ppuVar13,param_4); } pIVar9 = (IMAGE_DOS_HEADER *)(ulonglong)(iVar12 + 1); } if ((*(longlong *)(param_2[2].e_res_4_ + 2) != 0) || (lVar4._0_2_ = param_1[2].e_cparhdr, lVar4._2_2_ = param_1[2].e_minalloc, lVar4._4_2_ = param_1[2].e_maxalloc, lVar4._6_2_ = param_1[2].e_ss, pIVar9 = (IMAGE_DOS_HEADER *)FUN_140064bc0(lVar4), param_2 == pIVar9)) { pIVar6 = param_2; FUN_1400aadd0(param_1,param_2,ppuVar13,param_4); } pppuVar11 = &local_d0; FUN_140089980(pppuVar11); } else if ((int)uVar7 == 2) { ppuVar13 = local_res10; if (local_res10 == (undefined **)0x0) { ppuVar13 = (undefined **)PTR_DAT_140155010; } local_98 = Proud::AddrPort::vftable; local_90 = *(undefined4 *)(param_3 + 6); local_8c = *(word *)((longlong)param_3 + 0x34); pppuVar11 = (undefined ***)(*(longlong *)¶m_1[2].e_cparhdr + 0x88); pIVar6 = (IMAGE_DOS_HEADER *)&local_98; (*(code *)**pppuVar11)(); } ppuVar8 = local_res10; if (((local_res10 != (undefined **)0x0) && (local_res10 != (undefined **)PTR_DAT_140155010)) && (ppuVar1 = local_res10 + -1, ppuVar1 != (undefined **)0x0)) { piVar10 = (int *)FUN_140030200(pppuVar11,pIVar6,ppuVar13,param_4); local_68 = piVar10; FUN_14002e6e0(piVar10); local_60 = 1; piVar2 = (int *)((longlong)ppuVar8 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(ppuVar1); } FUN_14002e770((longlong)piVar10); } local_res10 = (undefined **)PTR_DAT_140155010; if (local_e8 != 0) { FUN_140086680(local_e8,pIVar6,(SIZE_T)ppuVar13); } } FUN_1400b6ec0((longlong)param_2,pIVar6,ppuVar13,param_4); return; }