377 lines
13 KiB
C
377 lines
13 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ab530 FUN_1400ab530
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400ab530(IMAGE_DOS_HEADER *param_1,longlong param_2,undefined **param_3,
|
|
undefined ***param_4)
|
|
|
|
{
|
|
undefined **ppuVar1;
|
|
longlong *plVar2;
|
|
int iVar3;
|
|
int iVar4;
|
|
int iVar5;
|
|
longlong lVar6;
|
|
longlong lVar7;
|
|
longlong *plVar8;
|
|
char cVar9;
|
|
uint uVar10;
|
|
uint uVar12;
|
|
longlong lVar13;
|
|
uint uVar11;
|
|
int *piVar14;
|
|
uint *puVar15;
|
|
int *piVar16;
|
|
undefined8 *puVar17;
|
|
longlong lVar18;
|
|
longlong *plVar19;
|
|
ulonglong uVar20;
|
|
undefined **ppuVar21;
|
|
longlong lVar22;
|
|
undefined ***pppuVar23;
|
|
int iVar24;
|
|
ulonglong uVar25;
|
|
uint uVar26;
|
|
undefined8 uVar27;
|
|
longlong **pplVar28;
|
|
uint uVar29;
|
|
undefined8 uVar30;
|
|
undefined8 uVar31;
|
|
undefined **local_res8;
|
|
undefined **local_res10;
|
|
longlong *local_res18;
|
|
undefined **local_50;
|
|
undefined8 local_48;
|
|
longlong local_40;
|
|
undefined8 local_38;
|
|
undefined4 local_30;
|
|
undefined4 local_2c;
|
|
|
|
lVar22 = param_2;
|
|
(**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x78) + 0x10))();
|
|
lVar18._0_2_ = param_1[2].e_cparhdr;
|
|
lVar18._2_2_ = param_1[2].e_minalloc;
|
|
lVar18._4_2_ = param_1[2].e_maxalloc;
|
|
lVar18._6_2_ = param_1[2].e_ss;
|
|
lVar13 = FUN_140064be0(lVar18);
|
|
*(undefined1 *)(lVar13 + 0xc0) = 0;
|
|
if (*(int *)(param_2 + 8) < 1) {
|
|
FUN_140030200(lVar18,lVar22,param_3,param_4);
|
|
local_res10 = (undefined **)PTR_DAT_140155010;
|
|
FUN_14001b7a0((longlong *)&local_res10,L"compeltedlength < 0 recvcomplete errorcode:%d",
|
|
(ulonglong)*(uint *)(param_2 + 0xc),param_4);
|
|
param_4 = &local_res10;
|
|
lVar22 = 0xb;
|
|
param_3 = (undefined **)0x3;
|
|
plVar19 = *(longlong **)¶m_1[2].e_cparhdr;
|
|
FUN_14007dca0(plVar19,0xb,(undefined *)0x3,(longlong **)param_4);
|
|
iVar24._0_1_ = param_1[2].e_magic[0];
|
|
iVar24._1_1_ = param_1[2].e_magic[1];
|
|
iVar24._2_2_ = param_1[2].e_cblp;
|
|
if (iVar24 < 4) {
|
|
param_1->e_program[0] = 0;
|
|
param_1->e_program[1] = 0;
|
|
param_1->e_program[2] = 0;
|
|
param_1->e_program[3] = 0;
|
|
param_1[2].e_magic[0] = '\x04';
|
|
param_1[2].e_magic[1] = '\0';
|
|
param_1[2].e_cblp = 0;
|
|
plVar19 = (longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x70);
|
|
uVar30 = (**(code **)(*plVar19 + 0x1c0))();
|
|
param_1[1].e_magic[0] = (char)uVar30;
|
|
param_1[1].e_magic[1] = (char)((ulonglong)uVar30 >> 8);
|
|
param_1[1].e_cblp = (short)((ulonglong)uVar30 >> 0x10);
|
|
param_1[1].e_cp = (short)((ulonglong)uVar30 >> 0x20);
|
|
param_1[1].e_crlc = (short)((ulonglong)uVar30 >> 0x30);
|
|
param_1[1].e_program[0] = 0;
|
|
}
|
|
ppuVar21 = local_res10;
|
|
if (((local_res10 != (undefined **)0x0) && (local_res10 != (undefined **)PTR_DAT_140155010)) &&
|
|
(ppuVar1 = local_res10 + -1, ppuVar1 != (undefined **)0x0)) {
|
|
piVar14 = (int *)FUN_140030200(plVar19,lVar22,param_3,param_4);
|
|
FUN_14002e6e0(piVar14);
|
|
piVar16 = (int *)((longlong)ppuVar21 + -4);
|
|
*piVar16 = *piVar16 + -1;
|
|
if (*piVar16 == 0) {
|
|
FUN_1400302f0(ppuVar1);
|
|
}
|
|
FUN_14002e770((longlong)piVar14);
|
|
}
|
|
local_res10 = (undefined **)PTR_DAT_140155010;
|
|
goto LAB_1400aba47;
|
|
}
|
|
lVar13._0_2_ = param_1[2].e_cparhdr;
|
|
lVar13._2_2_ = param_1[2].e_minalloc;
|
|
lVar13._4_2_ = param_1[2].e_maxalloc;
|
|
lVar13._6_2_ = param_1[2].e_ss;
|
|
lVar18 = FUN_140064be0(lVar13);
|
|
uVar25 = 0;
|
|
uVar12 = 0;
|
|
uVar20 = uVar25;
|
|
if (*(ulonglong **)(lVar18 + 0x128) != (ulonglong *)0x0) {
|
|
uVar20 = **(ulonglong **)(lVar18 + 0x128);
|
|
}
|
|
cVar9 = FUN_140035730(uVar20);
|
|
uVar26 = 0;
|
|
if (cVar9 == '\0') {
|
|
uVar30 = (**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x70) + 0x1c0))();
|
|
*(undefined8 *)(*(longlong *)¶m_1[2].e_cparhdr + 0x18c0) = uVar30;
|
|
lVar22._0_2_ = param_1[2].e_cparhdr;
|
|
lVar22._2_2_ = param_1[2].e_minalloc;
|
|
lVar22._4_2_ = param_1[2].e_maxalloc;
|
|
lVar22._6_2_ = param_1[2].e_ss;
|
|
lVar18 = FUN_140064be0(lVar22);
|
|
uVar20 = uVar25;
|
|
if (*(ulonglong **)(lVar18 + 0x128) != (ulonglong *)0x0) {
|
|
uVar20 = **(ulonglong **)(lVar18 + 0x128);
|
|
}
|
|
puVar17 = (undefined8 *)FUN_140035710(uVar20);
|
|
lVar6._0_2_ = param_1[2].e_cparhdr;
|
|
lVar6._2_2_ = param_1[2].e_minalloc;
|
|
lVar6._4_2_ = param_1[2].e_maxalloc;
|
|
lVar6._6_2_ = param_1[2].e_ss;
|
|
lVar18 = FUN_140064be0(lVar6);
|
|
param_3 = (undefined **)(ulonglong)*(uint *)(param_2 + 8);
|
|
FUN_1400bbc90((longlong *)(lVar18 + 0x130),puVar17,(SIZE_T)param_3);
|
|
plVar19 = (longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x658);
|
|
*plVar19 = *plVar19 + (longlong)*(int *)(param_2 + 8);
|
|
local_48 = 0;
|
|
local_40 = 0;
|
|
local_38 = 0;
|
|
local_50 = Proud::CReceivedMessageList::vftable;
|
|
local_30 = 1000;
|
|
local_2c = 1;
|
|
pppuVar23 = &local_50;
|
|
plVar19 = *(longlong **)¶m_1[2].e_cparhdr;
|
|
FUN_1400744e0(plVar19,(longlong)pppuVar23,param_3,param_4);
|
|
while (iVar24 = (int)uVar25, iVar24 != (int)local_38) {
|
|
if ((iVar24 < 0) || ((int)local_38 <= iVar24)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f5c0(plVar19,pppuVar23,param_3,param_4);
|
|
}
|
|
pppuVar23 = (undefined ***)(local_40 + (longlong)iVar24 * 0x48);
|
|
lVar18 = *(longlong *)¶m_1[2].e_cparhdr;
|
|
param_4 = (undefined ***)0x0;
|
|
param_3 = *(undefined ***)(lVar18 + 0x6f0);
|
|
puVar17 = FUN_1400a6640((longlong *)(lVar18 + 0x6e0),(undefined4 *)pppuVar23,param_3,0);
|
|
plVar19 = *(longlong **)(lVar18 + 0x6f0);
|
|
if (plVar19 == (longlong *)0x0) {
|
|
*(undefined8 **)(lVar18 + 0x6e8) = puVar17;
|
|
}
|
|
else {
|
|
*plVar19 = (longlong)puVar17;
|
|
}
|
|
*(undefined8 **)(lVar18 + 0x6f0) = puVar17;
|
|
if ((int)local_38 <= iVar24) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f5c0(plVar19,pppuVar23,param_3,param_4);
|
|
}
|
|
uVar25 = (ulonglong)(iVar24 + 1);
|
|
}
|
|
lVar22 = 0;
|
|
FUN_1400aadd0(param_1,(IMAGE_DOS_HEADER *)0x0,param_3,param_4);
|
|
FUN_140089980(&local_50);
|
|
goto LAB_1400aba47;
|
|
}
|
|
iVar3._0_1_ = param_1[2].e_magic[0];
|
|
iVar3._1_1_ = param_1[2].e_magic[1];
|
|
iVar3._2_2_ = param_1[2].e_cblp;
|
|
if (3 < iVar3) goto LAB_1400aba47;
|
|
FUN_140030200(uVar20,lVar22,param_3,param_4);
|
|
local_res8 = (undefined **)PTR_DAT_140155010;
|
|
uVar10 = FUN_140030080(L"close socket completion");
|
|
if ((local_res8 != (undefined **)0x0) &&
|
|
(uVar25 = 0, local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar25 = (ulonglong)*(uint *)(local_res8 + -1);
|
|
}
|
|
uVar11 = uVar10;
|
|
if ((((int)uVar10 <= (int)uVar25) && (uVar11 = uVar26, local_res8 != (undefined **)0x0)) &&
|
|
(local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar11 = *(uint *)(local_res8 + -1);
|
|
}
|
|
uVar29 = 1;
|
|
if (1 < (int)uVar11) {
|
|
uVar29 = uVar11;
|
|
}
|
|
uVar11 = uVar26;
|
|
if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar11 = *(uint *)(local_res8 + -1);
|
|
}
|
|
if ((int)uVar11 < (int)uVar29) {
|
|
if (local_res8 == (undefined **)0x0) {
|
|
local_res8 = (undefined **)PTR_DAT_140155010;
|
|
}
|
|
if ((int)uVar29 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14002f590();
|
|
}
|
|
if (uVar29 == 0) {
|
|
FUN_140003240((longlong *)&local_res8,PTR_DAT_140155010,uVar25,param_4);
|
|
}
|
|
else {
|
|
uVar11 = uVar26;
|
|
if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar11 = *(uint *)(local_res8 + -1);
|
|
}
|
|
if (uVar29 != uVar11) {
|
|
puVar15 = (uint *)FUN_140030280((longlong)(int)uVar29 * 2 + 10);
|
|
if (puVar15 != (uint *)0x0) {
|
|
*puVar15 = 0;
|
|
puVar15[1] = 1;
|
|
}
|
|
*puVar15 = uVar29;
|
|
uVar11 = uVar26;
|
|
if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar11 = *(uint *)(local_res8 + -1);
|
|
}
|
|
ppuVar21 = (undefined **)PTR_DAT_140155010;
|
|
if ((int)uVar29 < (int)uVar11) {
|
|
LAB_1400ab79c:
|
|
if (local_res8 != (undefined **)0x0) {
|
|
ppuVar21 = local_res8;
|
|
}
|
|
}
|
|
else {
|
|
uVar29 = uVar26;
|
|
if (local_res8 != (undefined **)0x0) {
|
|
if (local_res8 != (undefined **)PTR_DAT_140155010) {
|
|
uVar29 = *(uint *)(local_res8 + -1);
|
|
}
|
|
goto LAB_1400ab79c;
|
|
}
|
|
}
|
|
uVar20 = (ulonglong)uVar29;
|
|
FUN_1400300b0(puVar15 + 2,ppuVar21,uVar29);
|
|
FUN_140003240((longlong *)&local_res8,ppuVar21,uVar20,param_4);
|
|
local_res8 = (undefined **)(puVar15 + 2);
|
|
}
|
|
}
|
|
}
|
|
FUN_140002ea0((longlong *)&local_res8);
|
|
ppuVar21 = local_res8;
|
|
if (local_res8 == (undefined **)0x0) {
|
|
ppuVar21 = (undefined **)PTR_DAT_140155010;
|
|
}
|
|
FUN_1400300b0(ppuVar21,L"close socket completion",uVar10);
|
|
ppuVar21 = local_res8;
|
|
if (local_res8 == (undefined **)0x0) {
|
|
ppuVar21 = (undefined **)PTR_DAT_140155010;
|
|
}
|
|
uVar10 = FUN_140030080((short *)ppuVar21);
|
|
uVar26 = uVar12;
|
|
if (0 < (int)uVar10) {
|
|
uVar26 = uVar10;
|
|
}
|
|
uVar10 = uVar12;
|
|
if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) {
|
|
uVar10 = *(uint *)(local_res8 + -1);
|
|
}
|
|
if (((int)uVar26 < (int)uVar10) || (uVar26 = uVar12, local_res8 == (undefined **)0x0)) {
|
|
LAB_1400ab82f:
|
|
if (((local_res8 != (undefined **)PTR_DAT_140155010) && (local_res8 != (undefined **)0x0)) &&
|
|
(local_res8 + -1 != (undefined **)0x0)) {
|
|
*(uint *)(local_res8 + -1) = uVar26;
|
|
*(undefined2 *)((longlong)local_res8 + (longlong)(int)uVar26 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_res8 != (undefined **)PTR_DAT_140155010) {
|
|
uVar26 = *(uint *)(local_res8 + -1);
|
|
goto LAB_1400ab82f;
|
|
}
|
|
param_4 = &local_res8;
|
|
lVar22 = 0xb;
|
|
param_3 = (undefined **)0x3;
|
|
plVar19 = *(longlong **)¶m_1[2].e_cparhdr;
|
|
FUN_14007dca0(plVar19,0xb,(undefined *)0x3,(longlong **)param_4);
|
|
ppuVar21 = local_res8;
|
|
if (((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_140155010)) &&
|
|
(ppuVar1 = local_res8 + -1, ppuVar1 != (undefined **)0x0)) {
|
|
piVar16 = (int *)FUN_140030200(plVar19,lVar22,param_3,param_4);
|
|
FUN_14002e6e0(piVar16);
|
|
puVar15 = (uint *)((longlong)ppuVar21 + -4);
|
|
*puVar15 = *puVar15 - 1;
|
|
if (*puVar15 == 0) {
|
|
FUN_1400302f0(ppuVar1);
|
|
}
|
|
FUN_14002e770((longlong)piVar16);
|
|
}
|
|
local_res8 = (undefined **)PTR_DAT_140155010;
|
|
iVar4._0_1_ = param_1[2].e_magic[0];
|
|
iVar4._1_1_ = param_1[2].e_magic[1];
|
|
iVar4._2_2_ = param_1[2].e_cblp;
|
|
if (iVar4 < 4) {
|
|
param_1->e_program[0] = 0;
|
|
param_1->e_program[1] = 0;
|
|
param_1->e_program[2] = 0;
|
|
param_1->e_program[3] = 0;
|
|
param_1[2].e_magic[0] = '\x04';
|
|
param_1[2].e_magic[1] = '\0';
|
|
param_1[2].e_cblp = 0;
|
|
uVar30 = (**(code **)(*(longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x70) + 0x1c0))();
|
|
param_1[1].e_magic[0] = (char)uVar30;
|
|
param_1[1].e_magic[1] = (char)((ulonglong)uVar30 >> 8);
|
|
param_1[1].e_cblp = (short)((ulonglong)uVar30 >> 0x10);
|
|
param_1[1].e_cp = (short)((ulonglong)uVar30 >> 0x20);
|
|
param_1[1].e_crlc = (short)((ulonglong)uVar30 >> 0x30);
|
|
param_1[1].e_program[0] = 0;
|
|
}
|
|
LAB_1400aba47:
|
|
lVar18 = 0;
|
|
plVar19 = *(longlong **)(*(longlong *)¶m_1[2].e_cparhdr + 0x5d0);
|
|
if (plVar19 != (longlong *)0x0) {
|
|
lVar18 = *plVar19;
|
|
}
|
|
if (*(int *)(lVar18 + 0x100) < 4) {
|
|
lVar7._0_2_ = param_1[2].e_cparhdr;
|
|
lVar7._2_2_ = param_1[2].e_minalloc;
|
|
lVar7._4_2_ = param_1[2].e_maxalloc;
|
|
lVar7._6_2_ = param_1[2].e_ss;
|
|
lVar18 = FUN_140064be0(lVar7);
|
|
uVar12 = FUN_1400b2a10(lVar18,lVar22,param_3,param_4);
|
|
if (uVar12 != 0) {
|
|
FUN_140030200(lVar18,lVar22,param_3,param_4);
|
|
local_res18 = (longlong *)PTR_DAT_140155010;
|
|
FUN_14001b7a0((longlong *)&local_res18,L"%d Tcp issueRecv Failed SocketErrorCode",
|
|
(ulonglong)uVar12,param_4);
|
|
pplVar28 = &local_res18;
|
|
uVar30 = 3;
|
|
uVar27 = 1;
|
|
plVar19 = *(longlong **)¶m_1[2].e_cparhdr;
|
|
FUN_14007dca0(plVar19,3,(undefined *)0x1,pplVar28);
|
|
iVar5._0_1_ = param_1[2].e_magic[0];
|
|
iVar5._1_1_ = param_1[2].e_magic[1];
|
|
iVar5._2_2_ = param_1[2].e_cblp;
|
|
if (iVar5 < 4) {
|
|
param_1->e_program[0] = 0;
|
|
param_1->e_program[1] = 0;
|
|
param_1->e_program[2] = 0;
|
|
param_1->e_program[3] = 0;
|
|
param_1[2].e_magic[0] = '\x04';
|
|
param_1[2].e_magic[1] = '\0';
|
|
param_1[2].e_cblp = 0;
|
|
plVar19 = (longlong *)(*(longlong *)¶m_1[2].e_cparhdr + 0x70);
|
|
uVar31 = (**(code **)(*plVar19 + 0x1c0))();
|
|
param_1[1].e_magic[0] = (char)uVar31;
|
|
param_1[1].e_magic[1] = (char)((ulonglong)uVar31 >> 8);
|
|
param_1[1].e_cblp = (short)((ulonglong)uVar31 >> 0x10);
|
|
param_1[1].e_cp = (short)((ulonglong)uVar31 >> 0x20);
|
|
param_1[1].e_crlc = (short)((ulonglong)uVar31 >> 0x30);
|
|
param_1[1].e_program[0] = 0;
|
|
}
|
|
plVar8 = local_res18;
|
|
if (((local_res18 != (longlong *)0x0) && (local_res18 != (longlong *)PTR_DAT_140155010)) &&
|
|
(plVar2 = local_res18 + -1, plVar2 != (longlong *)0x0)) {
|
|
piVar14 = (int *)FUN_140030200(plVar19,uVar30,uVar27,pplVar28);
|
|
FUN_14002e6e0(piVar14);
|
|
piVar16 = (int *)((longlong)plVar8 + -4);
|
|
*piVar16 = *piVar16 + -1;
|
|
if (*piVar16 == 0) {
|
|
FUN_1400302f0(plVar2);
|
|
}
|
|
FUN_14002e770((longlong)piVar14);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|