/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400db900 FUN_1400db900 * Pseudocode, not original source. */ ulonglong FUN_1400db900(char *param_1,uint param_2,byte *param_3,undefined4 param_4,uint param_5, uint param_6,void *param_7,uint *param_8,undefined4 *param_9) { uint uVar1; uint uVar2; int iVar3; ulonglong uVar4; byte *_Memory; undefined1 *_Memory_00; byte *_Memory_01; ulonglong uVar5; byte *pbVar6; uint uVar7; uint uVar8; uint uVar9; ulonglong uVar10; uint local_48 [4]; if ((((param_1 == (char *)0x0) || (param_7 == (void *)0x0)) || (param_8 == (uint *)0x0)) || (param_9 == (undefined4 *)0x0)) { return 0x10; } *param_9 = 0; uVar4 = FUN_1400db770(param_6); if ((int)uVar4 != 0) { return uVar4; } uVar1 = *(uint *)(&DAT_140179f4c + (longlong)(int)param_6 * 0x80); uVar4 = (ulonglong)uVar1; uVar8 = (uint)((param_5 & 7) != 0) + (param_5 >> 3); if ((uVar8 - 2 <= uVar1 * 2) || (param_2 != uVar8)) { return 0x16; } _Memory = malloc((ulonglong)uVar8); _Memory_00 = malloc((ulonglong)uVar8); _Memory_01 = malloc(uVar4); if (_Memory != (byte *)0x0) { if ((_Memory_00 != (undefined1 *)0x0) && (_Memory_01 != (byte *)0x0)) { if (*param_1 == '\0') { local_48[0] = 1; memcpy(_Memory_01,param_1 + 1,uVar4); local_48[0] = local_48[0] + uVar1; uVar9 = (uVar8 - uVar1) - 1; uVar10 = (ulonglong)uVar9; memcpy(_Memory,param_1 + local_48[0],(ulonglong)uVar9); local_48[0] = (local_48[0] - 1) + (uVar8 - uVar1); uVar5 = FUN_1400e3720(param_6,(longlong)_Memory,uVar9,_Memory_00,uVar1); uVar7 = (uint)uVar5; if (uVar7 == 0) { if (uVar1 != 0) { pbVar6 = _Memory_01; uVar5 = uVar4; do { *pbVar6 = *pbVar6 ^ pbVar6[(longlong)_Memory_00 - (longlong)_Memory_01]; uVar5 = uVar5 - 1; pbVar6 = pbVar6 + 1; } while (uVar5 != 0); } uVar5 = FUN_1400e3720(param_6,(longlong)_Memory_01,uVar1,_Memory_00,uVar9); uVar7 = (uint)uVar5; if (uVar7 == 0) { if (uVar9 != 0) { pbVar6 = _Memory; do { *pbVar6 = *pbVar6 ^ pbVar6[(longlong)_Memory_00 - (longlong)_Memory]; uVar10 = uVar10 - 1; pbVar6 = pbVar6 + 1; } while (uVar10 != 0); } if (param_3 == (byte *)0x0) { param_4 = 0; param_3 = _Memory; } local_48[0] = uVar8; uVar5 = FUN_1400e38e0(param_6,(longlong)param_3,param_4,(longlong)_Memory_01,local_48); uVar7 = (uint)uVar5; if (uVar7 == 0) { iVar3 = memcmp(_Memory_01,_Memory,uVar4); uVar2 = uVar1; if (iVar3 == 0) { for (; (uVar2 < uVar9 && (_Memory[uVar2] == 0)); uVar2 = uVar2 + 1) { } if ((uVar2 == uVar9) || (_Memory[uVar2] != 1)) { uVar7 = 7; local_48[0] = uVar2; goto LAB_1400dbc00; } local_48[0] = uVar2 + 1; uVar9 = ((uVar8 - local_48[0]) - uVar1) - 1; uVar7 = *param_8; *param_8 = uVar9; if (uVar7 < uVar9) { uVar7 = 6; goto LAB_1400dbc00; } memcpy(param_7,_Memory + local_48[0],(ulonglong)uVar9); local_48[0] = uVar2 + (uVar8 - uVar1); *param_9 = 1; } uVar7 = 0; } } } } else { uVar7 = 0; } LAB_1400dbc00: free(_Memory_01); free(_Memory_00); free(_Memory); return (ulonglong)uVar7; } free(_Memory); } if (_Memory_00 != (undefined1 *)0x0) { free(_Memory_00); } if (_Memory_01 != (byte *)0x0) { free(_Memory_01); } return 0xd; }