113 lines
3.9 KiB
C
113 lines
3.9 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x14000a630 FUN_14000a630
|
|
* Pseudocode, not original source. */
|
|
|
|
wchar_t FUN_14000a630(basic_streambuf<wchar_t,std::char_traits<wchar_t>_> *param_1,wchar_t param_2)
|
|
|
|
{
|
|
void *pvVar1;
|
|
basic_streambuf<wchar_t,std::char_traits<wchar_t>_> bVar2;
|
|
int iVar3;
|
|
void *_Src;
|
|
longlong lVar4;
|
|
longlong lVar5;
|
|
wchar_t *pwVar6;
|
|
ulonglong uVar7;
|
|
void *pvVar8;
|
|
undefined4 uVar9;
|
|
ulonglong uVar10;
|
|
|
|
if (((byte)param_1[0x78] & 8) != 0) {
|
|
uVar7 = **(ulonglong **)(param_1 + 0x48);
|
|
if ((uVar7 != 0) && (uVar10 = *(ulonglong *)(param_1 + 0x70), uVar7 < uVar10)) {
|
|
iVar3 = **(int **)(param_1 + 0x60);
|
|
**(ulonglong **)(param_1 + 0x48) = uVar10;
|
|
**(undefined4 **)(param_1 + 0x60) =
|
|
(int)((longlong)((uVar7 + (longlong)iVar3 * 2) - uVar10) >> 1);
|
|
}
|
|
}
|
|
if (param_2 == L'\xffff') {
|
|
return L'\0';
|
|
}
|
|
uVar7 = **(ulonglong **)(param_1 + 0x48);
|
|
if ((uVar7 != 0) && (uVar7 < uVar7 + (longlong)**(int **)(param_1 + 0x60) * 2)) {
|
|
pwVar6 = std::basic_streambuf<wchar_t,std::char_traits<wchar_t>_>::_Pninc(param_1);
|
|
*pwVar6 = param_2;
|
|
return param_2;
|
|
}
|
|
if (((byte)param_1[0x78] & 2) != 0) {
|
|
return L'\xffff';
|
|
}
|
|
uVar10 = 0;
|
|
if (uVar7 != 0) {
|
|
uVar10 = (longlong)
|
|
(((longlong)**(int **)(param_1 + 0x60) * 2 - **(longlong **)(param_1 + 0x20)) + uVar7)
|
|
>> 1;
|
|
}
|
|
uVar7 = uVar10 >> 1;
|
|
if (uVar7 < 0x20) {
|
|
uVar7 = 0x20;
|
|
}
|
|
else if (uVar7 == 0) {
|
|
return L'\xffff';
|
|
}
|
|
do {
|
|
if (uVar10 <= 0x7fffffff - uVar7) break;
|
|
uVar7 = uVar7 >> 1;
|
|
} while (uVar7 != 0);
|
|
if (uVar7 == 0) {
|
|
return L'\xffff';
|
|
}
|
|
uVar7 = uVar7 + uVar10;
|
|
pvVar8 = FUN_140001a50(uVar7);
|
|
_Src = (void *)**(undefined8 **)(param_1 + 0x20);
|
|
uVar9 = (undefined4)((longlong)pvVar8 >> 1);
|
|
if ((uVar10 == 0) || (memcpy(pvVar8,_Src,uVar10 * 2), uVar10 == 0)) {
|
|
*(void **)(param_1 + 0x70) = pvVar8;
|
|
**(undefined8 **)(param_1 + 0x28) = pvVar8;
|
|
**(undefined8 **)(param_1 + 0x48) = pvVar8;
|
|
**(undefined4 **)(param_1 + 0x60) = (int)((longlong)(uVar7 * 2) >> 1);
|
|
bVar2 = param_1[0x78];
|
|
**(undefined8 **)(param_1 + 0x20) = pvVar8;
|
|
if (((byte)bVar2 & 4) == 0) {
|
|
**(undefined8 **)(param_1 + 0x40) = pvVar8;
|
|
**(undefined4 **)(param_1 + 0x58) = 1;
|
|
}
|
|
else {
|
|
**(undefined8 **)(param_1 + 0x40) = 0;
|
|
**(undefined4 **)(param_1 + 0x58) = uVar9;
|
|
}
|
|
}
|
|
else {
|
|
*(void **)(param_1 + 0x70) =
|
|
(void *)((longlong)pvVar8 + (*(longlong *)(param_1 + 0x70) - (longlong)_Src >> 1) * 2);
|
|
pvVar1 = (void *)((longlong)pvVar8 + (**(longlong **)(param_1 + 0x48) - (longlong)_Src >> 1) * 2
|
|
);
|
|
**(longlong **)(param_1 + 0x28) =
|
|
(longlong)((longlong)pvVar8 + (**(longlong **)(param_1 + 0x28) - (longlong)_Src >> 1) * 2);
|
|
**(longlong **)(param_1 + 0x48) = (longlong)pvVar1;
|
|
**(undefined4 **)(param_1 + 0x60) =
|
|
(int)((longlong)((uVar7 * 2 - (longlong)pvVar1) + (longlong)pvVar8) >> 1);
|
|
if (((byte)param_1[0x78] & 4) == 0) {
|
|
lVar4 = **(longlong **)(param_1 + 0x48);
|
|
lVar5 = **(longlong **)(param_1 + 0x40);
|
|
**(undefined8 **)(param_1 + 0x20) = pvVar8;
|
|
pvVar8 = (void *)((longlong)pvVar8 + (lVar5 - (longlong)_Src >> 1) * 2);
|
|
**(longlong **)(param_1 + 0x40) = (longlong)pvVar8;
|
|
**(undefined4 **)(param_1 + 0x58) = (int)((lVar4 - (longlong)pvVar8) + 2 >> 1);
|
|
}
|
|
else {
|
|
**(undefined8 **)(param_1 + 0x20) = pvVar8;
|
|
**(undefined8 **)(param_1 + 0x40) = 0;
|
|
**(undefined4 **)(param_1 + 0x58) = uVar9;
|
|
}
|
|
}
|
|
if (((byte)param_1[0x78] & 1) != 0) {
|
|
operator_delete(_Src);
|
|
}
|
|
*(uint *)(param_1 + 0x78) = *(uint *)(param_1 + 0x78) | 1;
|
|
pwVar6 = std::basic_streambuf<wchar_t,std::char_traits<wchar_t>_>::_Pninc(param_1);
|
|
*pwVar6 = param_2;
|
|
return param_2;
|
|
}
|
|
|