/** @file
Library and Utility Functions for DxeCore
Source: DxeCore.efi (HR650X BIOS)
Includes protocol/handle services, events, locks,
CPU helpers, GCD support, and miscellaneous utilities.
Originates from MdeModulePkg\Core\Dxe\Hand\Handle.c,
Event\Event.c, Misc\*, and BaseLib sources.
*/
#include "../uefi_headers/Uefi.h"
//
// Function: CoreInstallProtocolInterface @ 0x4e74
//
signed __int64 __fastcall CoreInstallProtocolInterface(char **p__, char *dst, int a3, __int64 p, char a5)
{
double v5; // xmm3_8
__int64 v9; // rax
__int64 v10; // rdx
__int64 v11; // r8
char *Info_19; // rsi
char *_; // rdi
signed __int64 v14; // rbx
__int64 v15; // rdx
__int64 p_1; // r8
__int64 v17; // rdx
__int64 v18; // r8
char *v19; // r13
char *__1; // rax
__int64 v21; // r8
__int64 v22; // rdx
__int64 v23; // r8
__int64 v24; // r8
__int64 v25; // r8
__int64 v26; // rdx
__int64 v27; // r8
__int64 v29; // [rsp+60h] [rbp+8h] BYREF
if ( !p__ || !dst || a3 )
return 0x8000000000000002uLL;
v9 = CoreGetProtocolName(dst);
if ( v9 )
Assert_3(64, "InstallProtocolInterface: %a %p\n", v9, p);
else
Assert_3(64, "InstallProtocolInterface: %g %p\n", dst, p);
Info_19 = 0;
_ = 0;
v14 = 0x8000000000000009uLL;
if ( *p__ )
{
v14 = CoreInstallProtocolInterfaceNotify(*p__, (__int64)dst, &v29, _, 0, 1u);
if ( v14 >= 0 )
return 0x8000000000000002uLL;
}
DxeGetInfo_8((__int64)&unk_25AC0, v10, v11, v5);
LOBYTE(v15) = 1;
v19 = CoreFindProtocolEntry(dst, v15, p_1, v5);
if ( v19 )
{
Info_19 = CoreSetTimer(4u, 0x58u, v18, v5);
if ( !Info_19 )
{
LABEL_11:
v14 = 0x8000000000000009uLL;
goto LABEL_20;
}
_ = *p__;
if ( *p__ )
{
v14 = CoreIsHandleValid(*p__);
if ( v14 < 0 )
{
Assert_3(0x80000000, "InstallProtocolInterface: input handle at 0x%x is invalid\n", (_DWORD)_);
goto LABEL_20;
}
}
else
{
__1 = CoreSetTimer(4u, 0x38u, v18, v5);
_ = __1;
if ( !__1 )
goto LABEL_11;
*(_QWORD *)__1 = 1818521192;
Assert_74((_QWORD *)__1 + 3, v17, v18, v5);
*((_QWORD *)_ + 6) = ++qword_26410;
Assert_53(&off_25AD8, (_QWORD *)_ + 1, v21, v5);
}
if ( CoreFindProtocolInterface(_, dst, p, v5) )
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Hand\\Handle.c",
474,
(__int64)"CoreFindProtocolInterface (Handle, Protocol, Interface) == ((void *) 0)",
v5);
*(_QWORD *)Info_19 = 1667656048;
*((_QWORD *)Info_19 + 3) = _;
*((_QWORD *)Info_19 + 6) = v19;
*((_QWORD *)Info_19 + 7) = p;
Assert_74((_QWORD *)Info_19 + 8, v22, v23, v5);
*((_QWORD *)Info_19 + 10) = 0;
Assert_54((__int64 *)_ + 3, (__int64 *)Info_19 + 1, v24, v5);
Assert_53((_QWORD *)v19 + 5, (_QWORD *)Info_19 + 4, v25, v5);
if ( a5 )
DxeNotify_2((__int64)v19, v17, v18, v5);
v14 = 0;
}
LABEL_20:
DxeGetInfo_10((__int64)&unk_25AC0, v17, v18, v5);
if ( v14 < 0 )
{
if ( Info_19 )
Assert_55((unsigned __int64)Info_19, v26, v27, v5);
Assert_3(0x80000000, "InstallProtocolInterface: %g %p failed with %r\n", dst, p, v14);
}
else
{
*p__ = _;
}
return v14;
}
//
// Function: CoreGetProtocolInterface @ 0x88dc
//
__int64 __fastcall CoreGetProtocolInterface(
__int64 a1,
__int64 p_n1718054249,
__int64 ldri,
PHYSICAL_ADDRESS ImageAddress,
_QWORD *a5,
char n3)
{
double v6; // xmm2_8
double v7; // xmm3_8
PE_COFF_LOADER_IMAGE_CONTEXT *p___ImageBase; // rsi
__int64 result; // rax
__int64 n3772; // rcx
const char *v14; // rax
int n3772_1; // edx
const char *v16; // rax
int n11; // eax
char v18; // r12
unsigned int n0x1000; // eax
unsigned __int64 v20; // rcx
bool v21; // cf
unsigned __int64 n232; // r8
__int64 n4095; // r8
unsigned __int64 v24; // r9
unsigned __int64 v25; // rdx
_BOOL8 v26; // rax
unsigned __int64 v27; // rdx
unsigned __int64 v28; // rdx
__int64 ImageAddress_1; // rdx
__int64 v30; // rdx
signed __int64 Image; // rbx
__int64 v32; // r8
int v33; // ebp
unsigned __int64 n232_1; // rdx
signed __int64 v35; // rax
char *v36; // rcx
unsigned __int64 __ImageBase; // rcx
__int16 n3772_2; // cx
_QWORD *v39; // r14
__int64 n12; // rdx
signed __int64 v41; // rax
char *v42; // rcx
__int64 v43; // rdx
char *v44; // [rsp+58h] [rbp+10h] BYREF
p___ImageBase = (PE_COFF_LOADER_IMAGE_CONTEXT *)(ldri + 240);
ZeroMemWrapper((char *)(ldri + 240), 0x90u, ldri, v7);
*(_QWORD *)(ldri + 280) = p_n1718054249;
*(_QWORD *)(ldri + 272) = DxeConfig_53;
if ( !p___ImageBase )
return 0x8000000000000002uLL;
result = sub_16608((__int64 *)p___ImageBase);
if ( result < 0 )
return result;
n3772 = *(unsigned __int16 *)(ldri + 360);
if ( (_WORD)n3772 != 0x8664 && (_WORD)n3772 != 3772 && (_WORD)n3772 != 332 )
{
v14 = (const char *)sub_860C(n3772, 3772);
Assert_3(0x80000000, "Image type %s can't be loaded ", v14);
v16 = (const char *)sub_860C((unsigned __int16)n3772, n3772_1);
Assert_3(0x80000000, "on %s UEFI system.\n", v16);
return 0x8000000000000003uLL;
}
n11 = *(unsigned __int16 *)(ldri + 362);
if ( n11 == 10 )
{
*(_DWORD *)(ldri + 336) = 1;
*(_DWORD *)(ldri + 340) = 2;
}
else if ( n11 == 11 )
{
*(_DWORD *)(ldri + 336) = 3;
*(_DWORD *)(ldri + 340) = 4;
}
else
{
if ( (unsigned int)(n11 - 12) > 1 )
{
*(_DWORD *)(ldri + 344) = 4;
return 0x8000000000000003uLL;
}
*(_DWORD *)(ldri + 336) = 5;
*(_DWORD *)(ldri + 340) = 6;
}
v18 = 0;
if ( !ImageAddress )
{
n0x1000 = *(_DWORD *)(ldri + 296);
if ( n0x1000 <= 0x1000 )
v20 = *(_QWORD *)(ldri + 248);
else
v20 = *(_QWORD *)(ldri + 248) + n0x1000;
v21 = p___ImageBase->ImageAddress < 0x100000;
n232 = ((v20 & 0xFFF) != 0) + (v20 >> 12);
*(_QWORD *)(ldri + 144) = n232;
if ( v21 && !*(_BYTE *)(ldri + 364) )
goto LABEL_23;
result = GetInfo_2(2, *(unsigned int *)(ldri + 336), n232, p___ImageBase);
if ( result >= 0 )
{
LABEL_25:
v18 = 1;
goto LABEL_33;
}
if ( !*(_BYTE *)(ldri + 364) )
LABEL_23:
result = GetInfo_2(0, *(unsigned int *)(ldri + 336), *(_QWORD *)(ldri + 144), p___ImageBase);
if ( result < 0 )
return result;
goto LABEL_25;
}
if ( *(_BYTE *)(ldri + 364) && p___ImageBase->ImageAddress != ImageAddress )
return 0x8000000000000002uLL;
v24 = *(_QWORD *)(ldri + 144);
n4095 = 4095;
if ( v24 )
{
v25 = *(_QWORD *)(ldri + 248) + *(unsigned int *)(ldri + 296);
v26 = (v25 & 0xFFF) != 0;
v27 = v25 >> 12;
if ( v24 < v26 + v27 )
{
*(_QWORD *)(ldri + 144) = v26 + v27;
return 0x8000000000000005uLL;
}
}
v28 = *(_QWORD *)(ldri + 248) + *(unsigned int *)(ldri + 296);
p___ImageBase->ImageAddress = ImageAddress;
*(_QWORD *)(ldri + 144) = (v28 >> 12) + ((v28 & 0xFFF) != 0);
LABEL_33:
ImageAddress_1 = p___ImageBase->ImageAddress;
*(_QWORD *)(ldri + 136) = p___ImageBase->ImageAddress;
if ( !*(_BYTE *)(ldri + 365) )
p___ImageBase->ImageAddress = (ImageAddress_1 + *(unsigned int *)(ldri + 296) - 1LL)
& ~(*(unsigned int *)(ldri + 296) - 1LL);
Image = sub_16C9C((__int64 *)p___ImageBase, ImageAddress_1, n4095, v7);
if ( Image < 0 )
goto LABEL_42;
v33 = n3 & 1;
if ( (n3 & 1) != 0 && *(_WORD *)(ldri + 362) == 12 )
{
n232_1 = *(_QWORD *)(ldri + 352);
v44 = 0;
v35 = Assert_67(6u, n232_1, &v44, v7);
v36 = v44;
if ( v35 < 0 )
v36 = 0;
*(_QWORD *)(ldri + 288) = v36;
if ( !v36 )
{
Image = 0x8000000000000009uLL;
LABEL_42:
if ( v18 )
{
DxeConfig_35(p___ImageBase->ImageAddress, *(_QWORD *)(ldri + 144), v32, v7);
p___ImageBase->ImageAddress = 0;
*(_QWORD *)(ldri + 136) = 0;
}
__ImageBase = *(_QWORD *)(ldri + 288);
if ( __ImageBase )
Assert_55(__ImageBase, v30, v32, v7);
return Image;
}
}
Image = PeCoffLoadImage(p___ImageBase);
if ( Image < 0 )
goto LABEL_42;
Assert_66(p___ImageBase->ImageAddress, *(_QWORD *)(ldri + 248), v32, v7);
n3772_2 = *(_WORD *)(ldri + 360);
*(_QWORD *)(ldri + 32) = *(_QWORD *)(ldri + 264);
*(_WORD *)(ldri + 208) = n3772_2;
if ( n3772_2 == 3772 )
{
v39 = (_QWORD *)(ldri + 216);
Image = GetInfo_9(&dst__3, 0, (_QWORD *)(ldri + 216), v7);
if ( Image < 0 || !*v39 )
{
Assert_3(-2147483644, "CoreLoadPeImage: There is no EBC interpreter for an EBC image.\n");
goto LABEL_42;
}
Image = (*(__int64 (__fastcall **)(_QWORD, __int64 (__fastcall *)(__int64, __int64, __int64, double)))(*v39 + 16LL))(
*v39,
Assert_66);
if ( Image < 0 )
goto LABEL_42;
Image = (*(__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64))*v39)(
*v39,
*(_QWORD *)(ldri + 8),
*(_QWORD *)(ldri + 264),
ldri + 32);
if ( Image < 0 )
goto LABEL_42;
}
n12 = *(unsigned __int16 *)(ldri + 362);
*(_QWORD *)(ldri + 104) = p___ImageBase->ImageAddress;
*(_QWORD *)(ldri + 112) = *(_QWORD *)(ldri + 248);
*(_DWORD *)(ldri + 120) = *(_DWORD *)(ldri + 336);
*(_DWORD *)(ldri + 124) = *(_DWORD *)(ldri + 340);
*(_QWORD *)(ldri + 16) = n12;
if ( v33 && (_DWORD)n12 == 12 )
{
v44 = 0;
v41 = Assert_67(6u, 0x30u, &v44, v7);
v42 = v44;
if ( v41 < 0 )
v42 = 0;
*(_QWORD *)(ldri + 224) = v42;
if ( !v42 )
goto LABEL_42;
*(_QWORD *)v42 = *(_QWORD *)(ldri + 104);
*(_QWORD *)(*(_QWORD *)(ldri + 224) + 8LL) = *(_QWORD *)(ldri + 112);
*(_QWORD *)(*(_QWORD *)(ldri + 224) + 16LL) = *(_QWORD *)(ldri + 288);
*(_QWORD *)(*(_QWORD *)(ldri + 224) + 24LL) = *(_QWORD *)(ldri + 8);
Assert_53(off_22838, (_QWORD *)(*(_QWORD *)(ldri + 224) + 32LL), v32, v7);
SataConfig(*(PE_COFF_LOADER_IMAGE_CONTEXT ***)(ldri + 224), v43, v6, v7);
}
if ( a5 )
*a5 = *(_QWORD *)(ldri + 264);
return 0;
}
//
// Function: CoreLocateProtocol @ 0x5344
//
__int64 __fastcall CoreLocateProtocol(_QWORD *_, char *dst, __int64 p, double a4)
{
__int64 result; // rax
__int64 v8; // rdx
__int64 v9; // r8
_QWORD *v10; // rax
__int64 v11; // rdx
__int64 v12; // r8
__int64 v13; // rdi
_QWORD *__ImageBase_1; // rax
__int64 v15; // rdx
__int64 v16; // r8
_QWORD *__ImageBase; // rsi
__int64 v18; // rdx
__int64 v19; // r8
__int64 v20; // rdx
__int64 v21; // r8
if ( !dst )
return 0x8000000000000002uLL;
result = sub_4B80(_);
if ( result >= 0 )
{
DxeGetInfo_8((__int64)&unk_25AC0, v8, v9, a4);
v10 = DxeConfig_52(_, dst, p, a4);
if ( v10 )
{
v13 = DxeConfig_24(_, (__int64)v10, v12, a4);
if ( v13 >= 0 )
{
v13 = 0x800000000000000EuLL;
__ImageBase_1 = DxeNotify_0(_, dst, p, a4);
__ImageBase = __ImageBase_1;
if ( __ImageBase_1 )
{
_[6] = ++qword_26410;
Assert_58(__ImageBase_1 + 1, v15, v16, a4);
*__ImageBase = 0;
Assert_55((unsigned __int64)__ImageBase, v18, v19, a4);
v13 = 0;
}
if ( Assert_75(_ + 3, v15, v16, a4) )
{
*_ = 0;
Assert_58(_ + 1, v11, v12, a4);
Assert_55((unsigned __int64)_, v20, v21, a4);
}
}
}
else
{
v13 = 0x800000000000000EuLL;
}
DxeGetInfo_10((__int64)&unk_25AC0, v11, v12, a4);
return v13;
}
return result;
}
//
// Function: CoreOpenProtocol @ 0x7c40
//
__int64 __fastcall CoreOpenProtocol(__int64 n3, __int64 n7, unsigned __int64 n232, _DWORD *a4)
{
double v4; // xmm3_8
int n7_1; // esi
int n3_1; // ebx
__int64 v9; // rbx
unsigned __int64 Pool; // rdi
unsigned __int64 n0xFFF; // rbp
unsigned __int64 __ImageBase; // r8
__int64 v13; // rdx
char v15; // [rsp+50h] [rbp+8h] BYREF
n7_1 = n7;
n3_1 = n3;
if ( (unsigned int)n3 >= 3 )
return 0x8000000000000002uLL;
if ( (unsigned int)(n7 - 14) <= 0x6FFFFFF1 || (_DWORD)n7 == 7 )
{
v9 = 0x8000000000000002uLL;
LABEL_22:
if ( v9 >= 0 )
{
if ( byte_264B0 && (unsigned int)(n7_1 - 5) <= 1 )
CoreBuildMemoryAttributesTable(n3, n7, n232, v4);
v15 = 0;
if ( qword_263D0 )
(*(void (__fastcall **)(__int64, char *))qword_263D0)(qword_263D0, &v15);
}
return v9;
}
if ( !a4 )
return 0x8000000000000002uLL;
if ( (_DWORD)n3 == 2 && (*a4 & 0xFFFLL) != 0 )
return 0x800000000000000EuLL;
Pool = *(_QWORD *)a4;
n0xFFF = -1;
if ( (_DWORD)n3 == 2 )
{
if ( n232 - 1 > 0xFFFFFFFFFFFFELL || Pool >= Pool + (n232 << 12) - 1 )
return 0x800000000000000EuLL;
}
else if ( (_DWORD)n3 == 1 )
{
n0xFFF = *(_QWORD *)a4;
}
DxeGetInfo_8((__int64)&unk_26340, n7, n232, v4);
if ( n3_1 == 2 || (Pool = CoreAllocatePool(n0xFFF, n232, n7_1, 4096)) != 0 )
{
LOBYTE(__ImageBase) = 1;
v9 = sub_7510(Pool, n232, __ImageBase, n7_1, 0, 0);
}
else
{
v9 = 0x8000000000000009uLL;
}
DxeGetInfo_10((__int64)&unk_26340, v13, __ImageBase, v4);
if ( v9 >= 0 )
{
*(_QWORD *)a4 = Pool;
goto LABEL_22;
}
return v9;
}
//
// Function: CoreRegisterProtocolNotify @ 0x9d80
//
unsigned __int64 __fastcall CoreRegisterProtocolNotify(_QWORD *_, _QWORD *n3772, __int64 i, double a4)
{
__int64 Info_4; // rax
__int64 v6; // rdx
__int64 p; // r8
_QWORD *Info; // rdi
__int64 v9; // rbx
__int64 (__fastcall *v10)(_QWORD *); // rax
Info_4 = DxeGetInfo_4(_, n3772, i, a4);
Info = (_QWORD *)Info_4;
if ( !Info_4 )
return 0x8000000000000002uLL;
if ( *(_BYTE *)(Info_4 + 24) )
{
v10 = *(__int64 (__fastcall **)(_QWORD *))(Info_4 + 128);
v9 = 0x8000000000000003uLL;
if ( !v10 )
return v9;
v9 = v10(_);
}
else
{
v9 = 0;
}
if ( v9 >= 0 )
{
LOBYTE(v6) = 1;
DxeConfig_3(Info, v6, p, a4);
}
return v9;
}
//
// Function: CoreReinstallProtocolInterface @ 0xa6e4
//
unsigned __int64 __fastcall CoreReinstallProtocolInterface(char *dst, __int64 a2, char **a3, double a4)
{
__int64 v7; // rdx
char *v8; // rbx
__int64 p; // r8
__int64 v10; // rdx
char *v11; // rbp
__int64 v12; // r8
char *v13; // rax
if ( !dst || !a2 || !a3 )
return 0x8000000000000002uLL;
DxeGetInfo_8((__int64)&unk_25AC0, a2, (__int64)a3, a4);
LOBYTE(v7) = 1;
v8 = 0;
v11 = DxeConfig_42(dst, v7, p, a4);
if ( v11 )
{
v13 = Assert_112(0x30u, v10, v12, a4);
v8 = v13;
if ( v13 )
{
*(_BYTE *)(a2 + 88) |= 2u;
*((_QWORD *)v13 + 5) = v11 + 40;
*(_QWORD *)v13 = 1853125232;
*((_QWORD *)v13 + 1) = v11;
*((_QWORD *)v13 + 4) = a2;
Assert_53((_QWORD *)v11 + 7, (_QWORD *)v13 + 2, v12, a4);
}
}
DxeGetInfo_10((__int64)&unk_25AC0, v10, v12, a4);
if ( v8 )
*a3 = v8;
return -(__int64)(v8 == 0) & 0x8000000000000009uLL;
}
//
// Function: CoreUninstallProtocolInterface @ 0xa7c0
//
__int64 __fastcall CoreUninstallProtocolInterface(_QWORD *_, char *dst, __int64 p, __int64 a4)
{
double v4; // xmm3_8
__int64 result; // rax
__int64 v10; // rdx
__int64 v11; // r8
_QWORD *v12; // rax
__int64 v13; // rdx
__int64 v14; // r8
__int64 v15; // rbx
_QWORD *v16; // rax
__int64 v17; // rbx
__int64 v18; // rdx
__int64 v19; // r8
__int64 v20; // rdx
__int64 v21; // r8
__int64 v22; // rdx
__int64 v23; // r8
result = sub_4B80(_);
if ( result >= 0 )
{
if ( !v10 )
return 0x8000000000000002uLL;
DxeGetInfo_8((__int64)&unk_25AC0, v10, v11, v4);
v12 = DxeConfig_52(_, dst, p, v4);
if ( v12 )
{
v15 = DxeConfig_24(_, (__int64)v12, v14, v4);
if ( v15 < 0 )
goto LABEL_9;
v16 = DxeNotify_0(_, dst, p, v4);
if ( v16 )
{
v17 = v16[6];
v16[7] = a4;
Assert_53((_QWORD *)(v17 + 40), v16 + 4, v14, v4);
_[6] = ++qword_26410;
DxeGetInfo_10((__int64)&unk_25AC0, v18, v19, v4);
DxeConfig_2(_, 0, 0, 1);
DxeGetInfo_8((__int64)&unk_25AC0, v20, v21, v4);
DxeNotify_2(v17, v22, v23, v4);
v15 = 0;
goto LABEL_9;
}
}
v15 = 0x800000000000000EuLL;
LABEL_9:
DxeGetInfo_10((__int64)&unk_25AC0, v13, v14, v4);
return v15;
}
return result;
}
//
// Function: CoreGetHandleCount @ 0x1521c
//
char *__fastcall CoreGetHandleCount(__int64 a1, __int64 a2, __int64 a3, double a4)
{
char *src; // rdi
__int64 v5; // rbx
_WORD *HobListWrapper; // rax
__int64 v7; // r8
_WORD *ConfigTableEntry; // rax
__int64 v9; // rdx
__int64 v10; // rcx
__int64 v11; // r8
char *v12; // rsi
__int64 v13; // r12
__int64 *v14; // r14
unsigned __int64 v15; // rbp
char *v16; // r15
__int64 v17; // rdx
__int64 v18; // rax
_WORD *j; // rax
__int64 v20; // r8
_WORD *v21; // rax
_DWORD *v22; // rcx
__int64 v23; // r8
int *v24; // rdx
int v25; // eax
char *src_1; // rax
src = src_3;
LODWORD(v5) = 0;
HobListWrapper = (_WORD *)GetHobListWrapper(a1, a2, a3, a4);
ConfigTableEntry = FindConfigTableEntry((__int64)&qword_226F0, HobListWrapper, v7, a4);
if ( ConfigTableEntry )
{
v5 = *((unsigned int *)ConfigTableEntry + 6);
if ( (_DWORD)v5 )
{
v12 = src + 88;
v13 = (unsigned int)v5;
v14 = (__int64 *)(ConfigTableEntry + 32);
v15 = (unsigned __int64)(src + 48);
v16 = (char *)(ConfigTableEntry + 24);
do
{
*((_QWORD *)v12 - 10) = *(v14 - 4);
Assert_15(v15 - 32, v9, v16 - 8, a4);
Assert_15(v15, v17, v16, a4);
v16 += 40;
*((_QWORD *)v12 - 1) = *(v14 - 1);
v15 += 96LL;
v18 = *v14;
v14 += 5;
*((_DWORD *)v12 + 2) = 0;
*(_QWORD *)v12 = v18;
v12 += 96;
--v13;
}
while ( v13 );
}
j = (_WORD *)GetHobListWrapper(v10, v9, v11, a4);
v21 = FindConfigTableEntry((__int64)&qword_22490, j, v20, a4);
if ( v21 && (_DWORD)v5 )
{
v22 = src + 96;
v23 = v5;
v24 = (int *)(v21 + 12);
do
{
v25 = *v24++;
*v22 = v25;
v22 += 24;
--v23;
}
while ( v23 );
}
}
src_1 = src_3;
*(_DWORD *)src_3 = v5;
return src_1;
}
//
// Function: CoreConnectController @ 0x15774
//
__int64 __fastcall CoreConnectController(__int64 buf, unsigned __int16 n0x1F, __int64 n8, __int16 n0x1F_2)
{
double v4; // xmm3_8
unsigned __int16 n8_1; // r15
char v8; // di
int n0x1F_3; // r14d
__int64 v11; // r8
int v12; // ebx
_WORD *v13; // rdi
__int64 k; // rcx
unsigned __int16 n0x1F_1; // di
int n7; // ebx
unsigned int i; // eax
unsigned __int16 n3; // dx
__int64 v20; // rax
int v21; // ebx
__int16 j; // bx
__int64 v23; // rax
__int64 v24; // rax
n8_1 = n8;
v8 = 32 - n8;
n0x1F_3 = *(_DWORD *)(buf + 28) >> (32 - n8);
Assert_97(buf, n8, n8, v4);
if ( (_WORD)n0x1F_3 )
{
n0x1F_1 = 0;
do
{
if ( n0x1F_1 >= 0x1Fu )
break;
n7 = *(_DWORD *)(buf + 28) >> 29;
if ( (_WORD)n7 == 7 )
{
for ( i = 0x10000000; (i & *(_DWORD *)(buf + 28)) != 0; i >>= 1 )
LOWORD(n7) = n7 + 1;
}
n3 = n7 - 3;
if ( (unsigned __int16)n7 < 7u )
n3 = 3;
Assert_97(buf, n3, v11, v4);
v20 = n0x1F_1++;
*(_BYTE *)(v20 + buf + 4636) = n7;
if ( n0x1F_1 == n0x1F_2 )
{
v21 = *(_DWORD *)(buf + 28) >> 30;
Assert_97(buf, 2u, v11, v4);
for ( j = v21 - 1; j >= 0; --j )
{
if ( n0x1F_1 >= 0x1Fu )
break;
v23 = n0x1F_1++;
*(_BYTE *)(v23 + buf + 4636) = 0;
}
}
}
while ( n0x1F_1 < (unsigned __int16)n0x1F_3 );
while ( n0x1F_1 < n0x1F && n0x1F_1 < 0x1Fu )
{
v24 = n0x1F_1++;
*(_BYTE *)(v24 + buf + 4636) = 0;
}
return SetMem16Wrapper(buf, n0x1F, buf + 4636, 8u, buf + 12860);
}
else
{
v12 = *(_DWORD *)(buf + 28) >> v8;
Assert_97(buf, n8_1, v11, v4);
v13 = (_WORD *)(buf + 12860);
for ( k = 256; k; --k )
*v13++ = v12;
SetMemWrapper(buf + 4636, n0x1F, 0, v4);
return 0;
}
}
//
// Function: CoreDisconnectController @ 0x15918
//
__int64 __fastcall CoreDisconnectController(__int64 buf, __int64 a2, __int64 i, double a4)
{
int n0x1FE_1; // ebp
__int64 v6; // r8
int v7; // ebx
__int64 result; // rax
_WORD *v9; // rdi
__int64 j; // rcx
unsigned __int16 n0x1FE; // bx
unsigned __int16 n0x13; // di
unsigned int n0x800000; // ecx
__int16 v14; // di
int v15; // edi
int v16; // edi
__int64 v17; // rax
__int64 v18; // rax
n0x1FE_1 = *(_DWORD *)(buf + 28) >> 23;
Assert_97(buf, 9u, i, a4);
if ( (_WORD)n0x1FE_1 )
{
n0x1FE = 0;
do
{
if ( n0x1FE >= 0x1FEu )
break;
n0x13 = *(_WORD *)(buf + 2 * ((unsigned __int64)*(unsigned int *)(buf + 28) >> 24) + 12860);
if ( n0x13 >= 0x13u )
{
n0x800000 = 0x800000;
do
{
if ( (*(_DWORD *)(buf + 28) & n0x800000) != 0 )
n0x13 = *(_WORD *)(buf + 2LL * n0x13 + 2088);
else
n0x13 = *(_WORD *)(buf + 2LL * n0x13 + 50);
n0x800000 >>= 1;
}
while ( n0x13 >= 0x13u );
}
Assert_97(buf, *(unsigned __int8 *)(n0x13 + buf + 4636), v6, a4);
if ( n0x13 > 2u )
{
v18 = n0x1FE++;
*(_BYTE *)(v18 + buf + 4126) = n0x13 - 2;
}
else
{
if ( n0x13 )
{
if ( n0x13 == 1 )
{
v15 = *(_DWORD *)(buf + 28) >> 28;
Assert_97(buf, 4u, v6, a4);
v14 = v15 + 3;
}
else
{
v16 = *(_DWORD *)(buf + 28) >> 23;
Assert_97(buf, 9u, v6, a4);
v14 = v16 + 20;
}
}
else
{
v14 = 1;
}
while ( --v14 >= 0 && n0x1FE < 0x1FEu )
{
v17 = n0x1FE++;
*(_BYTE *)(v17 + buf + 4126) = 0;
}
}
}
while ( n0x1FE < (unsigned __int16)n0x1FE_1 );
SetMemWrapper(n0x1FE + buf + 4126, 510 - n0x1FE, 0, a4);
return SetMem16Wrapper(buf, 0x1FEu, buf + 4126, 0xCu, buf + 4668);
}
else
{
v7 = *(_DWORD *)(buf + 28) >> 23;
Assert_97(buf, 9u, v6, a4);
SetMemWrapper(buf + 4126, 0x1FEu, 0, a4);
result = (unsigned __int16)v7;
v9 = (_WORD *)(buf + 4668);
for ( j = 4096; j; --j )
*v9++ = v7;
}
return result;
}
//
// Function: CoreLocateDevicePath @ 0x15dc8
//
unsigned __int64 __fastcall CoreLocateDevicePath(unsigned __int8 *a1, __int64 a2, unsigned __int64 buf, int n2)
{
double v4; // xmm3_8
int v9; // ebp
int v10; // r14d
unsigned __int8 *v12; // rsi
__int64 v13; // r8
int v14; // edi
__int64 v15; // rdx
__int64 i; // r8
if ( !a1 )
Assert_7(
(__int64)"e:\\hs\\IntelFrameworkModulePkg\\Library\\BaseUefiTianoCustomDecompressLib\\BaseUefiTianoCustomDecompressLib.c",
788,
(__int64)"Source != ((void *) 0)",
v4);
if ( !a2 )
Assert_7(
(__int64)"e:\\hs\\IntelFrameworkModulePkg\\Library\\BaseUefiTianoCustomDecompressLib\\BaseUefiTianoCustomDecompressLib.c",
789,
(__int64)"Destination != ((void *) 0)",
v4);
if ( !buf )
Assert_7(
(__int64)"e:\\hs\\IntelFrameworkModulePkg\\Library\\BaseUefiTianoCustomDecompressLib\\BaseUefiTianoCustomDecompressLib.c",
790,
(__int64)"Scratch != ((void *) 0)",
v4);
v9 = *a1 + (a1[1] << 8) + (a1[2] << 16) + (a1[3] << 24);
v10 = a1[4] + (a1[5] << 8) + (a1[6] << 16) + (a1[7] << 24);
if ( !v10 )
return 0;
v12 = a1 + 8;
SetMemWrapper(buf, 0x3440u, 0, v4);
v14 = n2 - 1;
if ( v14 )
{
if ( v14 == 1 )
*(_BYTE *)(buf + 13372) = 5;
else
Assert_7(
(__int64)"e:\\hs\\IntelFrameworkModulePkg\\Library\\BaseUefiTianoCustomDecompressLib\\BaseUefiTianoCustomDecompressLib.c",
824,
(__int64)"((BOOLEAN)(0==1))",
v4);
}
else
{
*(_BYTE *)(buf + 13372) = 4;
}
*(_QWORD *)buf = v12;
*(_QWORD *)(buf + 8) = a2;
*(_DWORD *)(buf + 40) = v9;
*(_DWORD *)(buf + 44) = v10;
Assert_97(buf, 0x20u, v13, v4);
sub_15AEC(buf, v15, i, v4);
return -(__int64)(*(_WORD *)(buf + 48) != 0) & 0x8000000000000002uLL;
}
//
// Function: CoreOpenProtocolInformation @ 0x17f18
//
__int64 __fastcall CoreOpenProtocolInformation(__int64 n32, _QWORD *a2, double a3, double a4)
{
double v4; // xmm1_8
PE_COFF_LOADER_IMAGE_CONTEXT *Pe32Data; // rbx
PE_COFF_LOADER_IMAGE_CONTEXT *Pe32Data_1; // rax
bool v7; // zf
__int16 n450; // ax
signed __int64 v9; // rax
void *EntryPoint_1; // rdi
void *EntryPoint; // [rsp+40h] [rbp+18h] BYREF
DumpCpuExceptionInfo(n32, a2, a3);
Pe32Data = (PE_COFF_LOADER_IMAGE_CONTEXT *)(a2[84] & 0xFFFFFFFFFFFFFFFCuLL);
if ( !Pe32Data )
return Assert_5("!!!! Can't find image information. !!!!\n");
while ( LOWORD(Pe32Data->ImageAddress) == 23117 )
{
Pe32Data_1 = (PE_COFF_LOADER_IMAGE_CONTEXT *)((char *)Pe32Data + LOWORD(Pe32Data->PeCoffHeaderOffset));
if ( Pe32Data_1 > Pe32Data && (unsigned __int64)Pe32Data_1 < a2[84] )
{
v7 = LODWORD(Pe32Data_1->ImageAddress) == 17744;
goto LABEL_13;
}
LABEL_14:
Pe32Data = (PE_COFF_LOADER_IMAGE_CONTEXT *)((char *)Pe32Data - 4);
if ( !Pe32Data )
goto LABEL_15;
}
if ( LOWORD(Pe32Data->ImageAddress) != 23126 )
goto LABEL_14;
n450 = WORD1(Pe32Data->ImageAddress);
if ( n450 != 332 && n450 != 512 && n450 != 3772 && n450 != -31132 && n450 != -21916 )
{
v7 = n450 == 450;
LABEL_13:
if ( v7 )
goto LABEL_15;
goto LABEL_14;
}
LABEL_15:
if ( !Pe32Data )
return Assert_5("!!!! Can't find image information. !!!!\n");
v9 = PeCoffGetEntryPoint(Pe32Data, &EntryPoint);
EntryPoint_1 = EntryPoint;
if ( v9 < 0 )
EntryPoint_1 = 0;
Assert_5("!!!! Find image ");
if ( PeCoffGetImageInfo(Pe32Data) )
Assert_5("%a", v4);
else
Assert_5("(No PDB) ");
return Assert_5(" (ImageBase=%016lp, EntryPoint=%016p) !!!!\n", Pe32Data, EntryPoint_1);
}
//
// Function: CoreCreateEvent @ 0xe3fc
//
unsigned __int64 __fastcall CoreCreateEvent(__int64 i, __int64 n2, __int64 a3, double a4)
{
int n2_1; // ebx
__int64 v6; // rdx
__int64 v7; // r8
__int64 v8; // rax
__int64 v9; // rbx
__int64 v10; // rdx
__int64 v11; // r8
__int64 v12; // rdx
__int64 v13; // r8
__int64 v15; // [rsp+40h] [rbp+18h] BYREF
v15 = a3;
n2_1 = n2;
if ( !i || *(_QWORD *)i != 1953396325 || (unsigned int)n2 > 2 || *(int *)(i + 8) >= 0 )
return 0x8000000000000002uLL;
DxeGetInfo_8((__int64)&unk_26230, n2, a3, a4);
if ( *(_QWORD *)(i + 152) )
{
Assert_58((_QWORD *)(i + 152), v6, v7, a4);
*(_QWORD *)(i + 152) = 0;
}
*(_QWORD *)(i + 168) = 0;
*(_QWORD *)(i + 176) = 0;
if ( n2_1 )
{
if ( n2_1 == 1 )
{
v8 = v15;
if ( !v15 )
{
(*(void (__fastcall **)(__int64, __int64 *))(qword_263F8 + 16))(qword_263F8, &v15);
v8 = v15;
}
*(_QWORD *)(i + 176) = v8;
}
DxeGetInfo_8((__int64)&unk_26218, v6, v7, a4);
v9 = qword_26498;
DxeGetInfo_10((__int64)&unk_26218, v10, v11, a4);
v12 = v9 + v15;
*(_QWORD *)(i + 168) = v9 + v15;
DxeConfig_54((char *)i, v12, v13, a4);
if ( !v15 )
CheckEvent((_UNKNOWN **)i_7, v6, v7, a4);
}
DxeGetInfo_10((__int64)&unk_26230, v6, v7, a4);
return 0;
}
//
// Function: CoreCloseEvent @ 0xe608
//
unsigned __int64 __fastcall CoreCloseEvent(int n4, unsigned __int64 n232, char **a3, double a4)
{
__int64 v8; // r8
__int64 v9; // rdx
__int64 v10; // r8
if ( (unsigned int)(n4 - 14) <= 0x6FFFFFF1 || n4 == 7 || !a3 )
return 0x8000000000000002uLL;
*a3 = 0;
if ( n232 > 0xFFFFFFFFFFFFFFD7uLL
|| (DxeInit_2((__int64)&unk_26248, n232, (__int64)a3, a4) & 0x8000000000000000uLL) != 0LL )
{
return 0x8000000000000009uLL;
}
*a3 = DxeConfig_4(n4, n232, v8, a4);
DxeGetInfo_10((__int64)&unk_26248, v9, v10, a4);
return -(__int64)(*a3 == 0) & 0x8000000000000009uLL;
}
//
// Function: CoreSignalEvent @ 0xe6e8
//
unsigned __int64 __fastcall CoreSignalEvent(int n7, unsigned __int64 n232, __int64 a3, double a4)
{
unsigned __int64 v7; // rbx
__int64 v8; // rdx
__int64 v9; // r8
__int64 v10; // [rsp+40h] [rbp+18h] BYREF
v10 = a3;
if ( (DxeInit_2((__int64)&unk_26340, n232, a3, a4) & 0x8000000000000000uLL) != 0LL )
return 0;
v7 = Assert_10(n7, n232);
DxeGetInfo_10((__int64)&unk_26340, v8, v9, a4);
if ( v7 )
{
LOBYTE(v10) = 0;
if ( qword_263D0 )
(*(void (__fastcall **)(__int64, __int64 *))qword_263D0)(qword_263D0, &v10);
}
return v7;
}
//
// Function: CoreCheckEvent @ 0xea84
//
unsigned __int64 __fastcall CoreCheckEvent(unsigned __int64 __ImageBase, _DWORD *n232, __int64 a3, double a4)
{
__int64 v6; // r8
unsigned __int64 v7; // rbx
__int64 v8; // rdx
__int64 v9; // r8
DxeGetInfo_8((__int64)&unk_26248, (__int64)n232, a3, a4);
v7 = DxeConfig_6(__ImageBase, n232, v6, a4);
DxeGetInfo_10((__int64)&unk_26248, v8, v9, a4);
return v7;
}
//
// Function: CoreWaitForEvent @ 0xeb14
//
__int64 __fastcall CoreWaitForEvent(
unsigned __int64 n12,
unsigned __int64 __ImageBase,
unsigned __int64 n232,
double a4)
{
unsigned __int64 __ImageBase_1; // r8
__int64 v7; // rdx
__int64 v8; // r8
__int64 result; // rax
int n12_1; // [rsp+40h] [rbp+8h] BYREF
n12_1 = n12;
DxeGetInfo_8((__int64)&unk_26340, __ImageBase, n232, a4);
LOBYTE(__ImageBase_1) = 1;
sub_7510(__ImageBase, n232, __ImageBase_1, 7, 0, 0);
DxeGetInfo_10((__int64)&unk_26340, v7, v8, a4);
result = qword_263D0;
LOBYTE(n12_1) = 0;
if ( qword_263D0 )
return (*(__int64 (__fastcall **)(__int64, int *))qword_263D0)(qword_263D0, &n12_1);
return result;
}
//
// Function: CoreSetTimer @ 0x13db0
//
char *__fastcall CoreSetTimer(unsigned int n4, unsigned __int64 n232, __int64 a3, double a4)
{
signed __int64 v5; // rax
__int64 v6; // r8
char *buf; // rcx
char *buf_1; // [rsp+40h] [rbp+18h] BYREF
buf_1 = 0;
v5 = Assert_67(n4, n232, &buf_1, a4);
buf = buf_1;
if ( v5 < 0 )
buf = 0;
if ( buf && n232 )
return ZeroMemWrapper(buf, n232, v6, a4);
return buf;
}
//
// Function: CoreStall @ 0x1a210
//
unsigned __int64 __fastcall CoreStall(__int64 a1, __int64 a2, __int64 a3, double a4)
{
__int64 v4; // rdx
__int64 v5; // rcx
__int64 v6; // r8
if ( CpuGetInfo(a1, a2, a3, a4) == 1 )
return *(unsigned int *)(sub_1A1D4(v5, v4, v6, a4) + 32);
else
return __readmsr(0x802u);
}
//
// Function: CpuGetInfo @ 0x1a23c
//
__int64 __fastcall CpuGetInfo(__int64 a1, __int64 a2, __int64 a3, double a4)
{
unsigned __int64 v5; // rax
__int16 v6; // bx
if ( !Assert_109(a1, a2, a3, a4) )
return 1;
v5 = __readmsr(0x1Bu);
v6 = v5;
if ( (v5 & 0x800) == 0 )
Assert_7(
(__int64)"e:\\hs\\UefiCpuPkg\\Library\\BaseXApicX2ApicLib\\BaseXApicX2ApicLib.c",
343,
(__int64)"ApicBaseMsr.Bits.EN != 0",
a4);
return ((v6 & 0x400) != 0) + 1LL;
}
//
// Function: CoreGetNextMonotonicCount @ 0x1a298
//
__int64 __fastcall CoreGetNextMonotonicCount(__int64 a1, __int64 a2, __int64 a3, double a4)
{
unsigned int NextMonotonicCount_1; // ebx
__int64 v5; // rdx
__int64 v6; // rcx
__int64 v7; // r8
__int64 v8; // rdx
__int64 v9; // rcx
__int64 v10; // r8
__int64 v11; // rdx
__int64 v12; // rcx
__int64 v13; // r8
unsigned int NextMonotonicCount; // eax
unsigned int NextMonotonicCount_2; // ecx
unsigned int v16; // ecx
unsigned int v18; // [rsp+40h] [rbp+8h] BYREF
unsigned int p_n0xB; // [rsp+48h] [rbp+10h] BYREF
unsigned int p_n0x100; // [rsp+50h] [rbp+18h] BYREF
NextMonotonicCount_1 = CoreStall(a1, a2, a3, a4);
if ( CpuGetInfo(v6, v5, v7, a4) == 1 )
{
if ( CpuGetInfo(v9, v8, v10, a4) == 1 )
{
CpuConfig_1(0, &p_n0xB, 0, 0, 0);
if ( p_n0xB >= 0xB && (CpuConfig_0(0xBu, 0, 0, &v18, 0, &p_n0x100), (_WORD)v18) )
{
NextMonotonicCount = p_n0x100;
}
else
{
CpuConfig_1(1u, 0, &v18, 0, 0);
NextMonotonicCount = HIBYTE(v18);
}
}
else
{
NextMonotonicCount = CoreGetNextMonotonicCount(v12, v11, v13, a4);
}
NextMonotonicCount_2 = NextMonotonicCount_1;
NextMonotonicCount_1 = NextMonotonicCount;
v16 = HIBYTE(NextMonotonicCount_2);
if ( NextMonotonicCount < 0x100 )
return v16;
}
return NextMonotonicCount_1;
}
//
// Function: CpuConfig @ 0x1a5b0
//
__int64 __fastcall CpuConfig(unsigned int _RAX, _DWORD *a2, _DWORD *a3, _DWORD *a4, _DWORD *a5)
{
__int64 result; // rax
_RAX = _RAX;
__asm { cpuid }
if ( a2 )
*a2 = result;
if ( a3 )
*a3 = _RBX;
if ( a4 )
*a4 = _RCX;
if ( a5 )
*a5 = _RDX;
return result;
}
//
// Function: CoreCalculateCrc32 @ 0x3620
//
__int64 __fastcall CalculateCrc32(unsigned __int64 __ImageBase, unsigned __int64 a2, __int64 a3, double a4)
{
__int64 v7; // rdx
__int64 Pages; // rsi
__int64 v9; // r8
__int64 v10; // rdx
__int64 v11; // r8
Assert_3(0x100000, "GCD:CoreSetMemorySpaceCapabilities(Base=%016lx,Length=%016lx)\n", __ImageBase, a2);
Assert_3(0x100000, " Capabilities = %016lx\n", a3);
Pages = CoreAllocatePages(37, 0, 0, __ImageBase, a2, a3, 0);
if ( Pages >= 0 )
{
DxeGetInfo_8((__int64)&unk_26340, v7, v9, a4);
sub_7510(__ImageBase, a2 >> 12, 0, 0, 1, a3 & 0x7FFFFFFFFFFFFFFFLL);
DxeGetInfo_10((__int64)&unk_26340, v10, v11, a4);
}
return Pages;
}
//
// Function: FindConfigTableEntry @ 0x12b34
//
_WORD *__fastcall FindConfigTableEntry(__int64 a1, _WORD *j, __int64 a3, double a4)
{
_WORD *NextHobWrapper; // rax
__int64 v6; // r8
_WORD *NextHobWrapper_1; // rbx
while ( 1 )
{
NextHobWrapper = GetNextHobWrapper(4, j, a3, a4);
NextHobWrapper_1 = NextHobWrapper;
if ( !NextHobWrapper || Assert_103(a1, (__int64)(NextHobWrapper + 4), v6, a4) )
break;
j = (_WORD *)((char *)NextHobWrapper_1 + (unsigned __int16)NextHobWrapper_1[1]);
}
return NextHobWrapper_1;
}
//
// Function: GetNextDescriptor @ 0xdbe4
//
__int64 __fastcall GetNextDescriptor(__int64 a1, unsigned int *a2, __int64 a3, double a4)
{
__int64 v5; // rbx
v5 = a1;
if ( *(_QWORD *)(a1 - 24) == 1112950367 )
v5 = a1 - 24;
else
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\FwVolBlock\\FwVolBlock.c",
108,
(__int64)"CR has Bad Signature",
a4);
*a2 = *(_DWORD *)(v5 + 104) & 0xFFFFFFDF;
return 0;
}
//
// Function: InsertNewGcdEntry @ 0xdb1c
//
char *__fastcall InsertNewGcdEntry(__int64 a1, __int64 a2, __int64 _, double a4)
{
char *src; // rdi
unsigned __int64 v7; // rbx
unsigned __int64 count; // rsi
char *dst; // rax
char *src_1; // rbx
__int64 v11; // rdx
__int64 v12; // r8
*(_DWORD *)DXE_SERV__0 |= 1u;
src = src_7;
if ( (unsigned int)dword_2647C >= (unsigned __int64)qword_26490 )
{
count = 8 * qword_26490;
dst = GetInfo_19(4u, 8 * qword_26490 + 4096, _, a4);
src_1 = dst;
if ( !dst )
goto LABEL_10;
MemConfig_1(dst, src, count, a4);
Assert_55((unsigned __int64)src, v11, v12, a4);
src = src_1;
src_7 = src_1;
v7 = qword_26490;
qword_26490 += 512;
}
else
{
v7 = 0;
if ( *(_QWORD *)src_7 )
{
do
++v7;
while ( *(_QWORD *)&src_7[8 * v7] );
}
if ( v7 >= qword_26490 )
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
197,
(__int64)"Index < mMaxTableEntries",
a4);
}
dst = GetInfo_19(4u, 0x18u, _, a4);
*(_QWORD *)&src[8 * v7] = dst;
if ( dst )
{
*(_DWORD *)dst = 1;
*(_QWORD *)(*(_QWORD *)&src[8 * v7] + 8LL) = a2;
dst = *(char **)&src[8 * v7];
*((_QWORD *)dst + 2) = _;
++dword_2647C;
*(_DWORD *)DXE_SERV__0 |= 2u;
}
LABEL_10:
*(_DWORD *)DXE_SERV__0 &= ~1u;
return dst;
}
//
// Function: InitializeLock @ 0x9df8
//
__int64 __fastcall ReleaseLock(__int64 *p, __int64 a2)
{
unsigned int v2; // ebx
int n2; // eax
bool v7; // sf
_QWORD v8[3]; // [rsp+30h] [rbp-18h] BYREF
char v9; // [rsp+60h] [rbp+18h] BYREF
__int64 v10; // [rsp+68h] [rbp+20h] BYREF
v2 = 0;
v9 = 0;
if ( qword_263D0 )
{
(*(void (__fastcall **)(__int64, char *))qword_263D0)(qword_263D0, &v9);
if ( v9 )
return 0;
}
if ( p == (__int64 *)p_0 )
{
n2 = 2;
}
else if ( !a2
|| (v10 = 0,
v8[0] = a2,
(*((__int64 (__fastcall **)(unsigned int *, _QWORD *, __int64 *))buf_0 + 23))(dst_2, v8, &v10) < 0)
|| (v7 = (*((__int64 (__fastcall **)(__int64, unsigned int *, _QWORD, _QWORD, _QWORD, int))buf_0 + 35))(
v10,
dst_2,
0,
0,
0,
4) < 0,
n2 = 2,
v7) )
{
n2 = 1;
}
LOBYTE(v2) = (n2 & n2) != 0;
return v2;
}
//
// Function: EfiReleaseLock @ 0xad90
//
void __cdecl EfiReleaseLock(EFI_LOCK *Lock)
{
__int64 v1; // rdx
__int64 v2; // r8
double v3; // xmm3_8
_QWORD *v4; // rsi
__int64 v5; // r14
__int64 v7; // rbx
v4 = (_QWORD *)v2;
v5 = v1;
if ( n0x10 == 4 && Lock && v1 )
{
do
LABEL_4:
v7 = 0;
while ( !Lock );
while ( CloseEvent(*(_QWORD *)(v5 + 8 * v7), v1, v2, v3) == 0x8000000000000006uLL )
{
if ( ++v7 >= (unsigned __int64)Lock )
goto LABEL_4;
}
if ( v4 )
*v4 = v7;
}
}
//
// Function: AcquireLock @ 0xae24
//
__int64 __fastcall AcquireLock(unsigned __int64 i, __int64 a2, __int64 a3, double a4)
{
__int64 v6; // rdx
__int64 v7; // r8
__int64 v8; // rdx
__int64 v9; // r8
signed __int64 v10; // rax
signed __int64 v11; // rbx
if ( !i || *(_QWORD *)i != 1953396325 )
return 0x8000000000000002uLL;
if ( *(int *)(i + 8) < 0 )
GetInfo_6(i, 0, 0, a4);
DxeGetInfo_8((__int64)&unk_26088, a2, a3, a4);
if ( *(_QWORD *)(i + 136) )
Assert_58((_QWORD *)(i + 136), v6, v7, a4);
if ( *(_QWORD *)(i + 72) )
Assert_58((_QWORD *)(i + 72), v6, v7, a4);
if ( *(_QWORD *)(i + 16) )
Assert_58((_QWORD *)(i + 16), v6, v7, a4);
DxeGetInfo_10((__int64)&unk_26088, v6, v7, a4);
if ( (*(_BYTE *)(i + 88) & 2) != 0 )
DxeConfig_46(i, v8, v9, a4);
*(_QWORD *)i = 0;
v10 = Assert_55(i, v8, v9, a4);
v11 = v10;
if ( v10 < 0 )
{
Assert_3(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10);
Assert_7((__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Event\\Event.c", 817, (__int64)"!EFI_ERROR (Status)", a4);
}
return v11;
}
//
// Function: EfiAcquireLock @ 0xb6f8
//
void __cdecl EfiAcquireLock(EFI_LOCK *Lock)
{
char *buf; // rax
__int64 v2; // rdx
if ( (qword_260D0 & 1) != 0 )
{
Assert_3(0x400000, "SetPropertiesTableSectionAlignment - Clear\n");
buf = buf_0;
qword_260D0 &= ~1uLL;
v2 = *((unsigned int *)buf_0 + 3);
*((_DWORD *)buf_0 + 4) = 0;
*((_QWORD *)buf + 7) = sub_7F40;
(*((void (__fastcall **)(char *, __int64))buf + 43))(buf, v2);
}
}
//
// Function: CpuFlushWrite @ 0xb50
//
void *__fastcall CpuFlushWrite(unsigned __int64 __ImageBase, unsigned __int64 count, __int64 a3, double a4)
{
if ( !__ImageBase )
Assert_7(
(__int64)"e:\\hs\\MdePkg\\Library\\BaseDebugLibSerialPort\\DebugLib.c",
179,
(__int64)"Buffer != ((void *) 0)",
a4);
return SetMemWrapper(__ImageBase, count, 175, a4);
}
//
// Function: CpuGetInfo @ 0x950
//
__int64 __fastcall CpuGetInfo(unsigned int a1, _DWORD *p_n0xB, _DWORD *a3, _DWORD *a4, _DWORD *a5)
{
__int64 v11; // [rsp-8h] [rbp-10h]
v11 = a1;
__asm { cpuid }
if ( a4 )
*a4 = _RCX;
if ( p_n0xB )
*p_n0xB = _RAX;
if ( a3 )
*a3 = _RBX;
if ( a5 )
*a5 = _RDX;
return v11;
}
//
// Function: RawGetCpuInfo @ 0xa00
//
__int64 __fastcall RawGetCpuInfo(
unsigned int n11,
__int64 a2,
_DWORD *a3,
_DWORD *a4,
_DWORD *a5,
unsigned int *p_n0x100)
{
__int64 n11_1; // [rsp-8h] [rbp-10h]
n11_1 = n11;
__asm { cpuid }
if ( a5 )
*a5 = _RCX;
if ( a3 )
*a3 = _RAX;
if ( a4 )
*a4 = _RBX;
if ( p_n0x100 )
*p_n0x100 = _RDX;
return n11_1;
}
//
// Function: CoreRaiseTpl @ 0x1a5f0
//
int *__fastcall RaiseTpl(int *buf, int value, unsigned __int64 n4)
{
int *buf_1; // rdi
int value_1; // eax
unsigned __int64 n4_1; // rcx
__int16 value_2; // bx
int v7; // eax
__int64 v8; // rdx
char n4_2; // dl
unsigned __int64 i; // rcx
buf_1 = buf;
value_1 = value;
n4_1 = n4;
BYTE1(value_1) = value;
value_2 = value_1;
v7 = value_1 << 16;
LOWORD(v7) = value_2;
if ( n4 >= 4 )
{
v8 = (unsigned __int8)buf_1 & 3;
if ( ((unsigned __int8)buf_1 & 3) != 0 )
{
memset(buf_1, value_2, 4 - v8);
buf_1 = (int *)((char *)buf_1 + 4 - v8);
n4_1 = n4 - (4 - v8);
}
n4_2 = n4_1;
for ( i = n4_1 >> 2; i; --i )
*buf_1++ = v7;
n4_1 = n4_2 & 3;
}
memset(buf_1, value_2, n4_1);
return buf;
}
//
// Function: CoreRestoreTpl @ 0x1a650
//
char *__fastcall RestoreTpl(char *dst, char *src, unsigned __int64 n8)
{
unsigned __int64 dst_1; // rdi
unsigned __int64 n8_1; // rcx
char v10; // dl
char *n8_2; // rax
unsigned __int64 count; // rax
unsigned __int64 count_1; // rbx
char n8_3; // al
unsigned __int64 v15; // rcx
unsigned __int64 n8_4; // rax
__asm { pushf }
dst_1 = (unsigned __int64)dst;
n8_1 = n8;
v10 = 0;
n8_2 = &src[-dst_1];
if ( (unsigned __int64)src < dst_1 )
{
n8_2 = (char *)(dst_1 - (_QWORD)src);
if ( (unsigned __int64)&src[n8] >= dst_1 )
{
src += n8;
dst_1 += n8;
v10 = 1;
}
}
if ( n8 < 8 || (unsigned __int64)n8_2 < 8 )
goto LABEL_19;
count = (unsigned __int8)src & 7;
count_1 = dst_1 & 7;
if ( v10 )
{
--src;
--dst_1;
}
if ( count == count_1 && count )
{
if ( !v10 )
count = 8 - count;
qmemcpy((void *)dst_1, src, count);
src += count;
dst_1 += count;
n8_1 = n8 - count;
}
if ( v10 )
{
src -= 7;
dst_1 -= 7LL;
}
n8_3 = n8_1;
v15 = n8_1 >> 3;
qmemcpy((void *)dst_1, src, 8 * v15);
src += 8 * v15;
dst_1 += 8 * v15;
n8_4 = n8_3 & 7;
if ( n8_4 )
{
if ( v10 )
{
src += 8;
dst_1 += 8LL;
}
n8_1 = n8_4;
LABEL_19:
if ( v10 )
{
--src;
--dst_1;
}
qmemcpy((void *)dst_1, src, n8_1);
}
__asm { popf }
return dst;
}
//
// Function: ValidateProtocolRecord @ 0x4b80
//
unsigned __int64 __fastcall CoreIsHandleValid(_QWORD *a1)
{
if ( a1 )
return -(__int64)(*a1 != 1818521192) & 0x8000000000000002uLL;
else
return 0x8000000000000002uLL;
}
//
// Function: IsProtocolInstalled @ 0x1d78
//
unsigned __int64 IsProtocolInstalled()
{
return 0xA000000000000002uLL;
}
//
// Function: IsProtocolInstalledOnHandle @ 0x1d84
//
__int64 __fastcall IsProtocolInstalledOnHandle(__int64 a1)
{
char *buf; // rax
__int64 result; // rax
unsigned int v4; // [rsp+30h] [rbp+8h] BYREF
buf = buf_0;
*(_DWORD *)(a1 + 16) = 0;
v4 = 0;
(*((void (__fastcall **)(__int64, _QWORD, unsigned int *))buf + 43))(a1, *(unsigned int *)(a1 + 12), &v4);
result = v4;
*(_DWORD *)(a1 + 16) = v4;
return result;
}
//
// Function: AddProtocolToHandle @ 0x6118
//
signed __int64 __fastcall AddProtocolToHandle(
_QWORD *_,
__int64 *a2,
__int64 a3,
unsigned __int64 i,
_QWORD *a5,
char a6)
{
signed __int64 k_1; // rax
unsigned __int64 j; // rdi
unsigned __int64 k; // rcx
__int64 v13[5]; // [rsp+30h] [rbp-28h] BYREF
k_1 = ValidateProtocolRecord(_);
if ( k_1 >= 0 )
{
if ( a6 )
{
for ( j = 0; j < i; ++j )
{
k_1 = DxeConfig_5((_QWORD *)a5[j], (__int64)dst_3, v13, ::_, 0, 1u);
if ( k_1 >= 0 )
{
k_1 = v13[0];
if ( v13[0] )
{
if ( *(_QWORD **)(v13[0] + 32) == _ )
k_1 = AddProtocolToHandle((_QWORD *)a5[j], a2, a3, i, a5, 0);
}
}
}
}
else
{
k_1 = DxeConfig_5(_, (__int64)dst_3, v13, ::_, 0, 1u);
if ( k_1 >= 0 && v13[0] )
{
k_1 = *a2;
for ( k = 0; k < k_1; ++k )
{
if ( k >= i )
break;
if ( v13[0] == *(_QWORD *)(a3 + 8 * k) )
return k_1;
}
if ( k_1 < i )
*(_QWORD *)(a3 + 8 * k_1) = v13[0];
*a2 = k_1 + 1;
for ( k_1 = 0; k_1 < i; ++k_1 )
{
if ( (_QWORD *)a5[k_1] == _ )
a5[k_1] = 0;
}
}
}
}
return k_1;
}
//
// Function: RemoveProtocolFromHandle @ 0x6d80
//
_QWORD *__fastcall RemoveProtocolFromHandle(_BYTE *i, __int64 __ImageBase, __int64 a3, double a4)
{
_QWORD *v4; // rdi
_QWORD *result; // rax
__int64 v7; // r8
v4 = i + 8;
result = (_QWORD *)Assert_58((_QWORD *)i + 1, __ImageBase, a3, a4);
*v4 = 0;
if ( i[24] )
return Assert_53(&dst_1, v4, v7, a4);
return result;
}
//
// Function: ReportStatusCode @ 0x146f0
//
EFI_STATUS __cdecl ReportStatusCode(EFI_STATUS_CODE_TYPE Type, EFI_STATUS_CODE_VALUE Value)
{
__int64 v2; // r9
__int64 v3; // rdi
__int64 (__fastcall **v6)(_QWORD, _QWORD, _QWORD, __int64, __int64); // r10
__int64 (__fastcall *v7)(void *, _QWORD, __int64 *); // r9
__int64 v8; // rax
__int64 v10; // [rsp+60h] [rbp+28h]
v3 = v2;
if ( (unsigned int)(unsigned __int8)Type - 1 > 2 )
return 0x8000000000000003uLL;
v6 = (__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64, __int64))qword_26508;
if ( qword_26508 )
return (*v6)(Type, Value, 0, v3, v10);
if ( !buf_0 )
return 0x8000000000000003uLL;
v7 = (__int64 (__fastcall *)(void *, _QWORD, __int64 *))*((_QWORD *)buf_0 + 40);
if ( !v7 )
return 0x8000000000000003uLL;
v8 = v7(&unk_22410, 0, &qword_26508);
v6 = (__int64 (__fastcall **)(_QWORD, _QWORD, _QWORD, __int64, __int64))qword_26508;
if ( v8 < 0 )
v6 = 0;
qword_26508 = (__int64)v6;
if ( v6 )
return (*v6)(Type, Value, 0, v3, v10);
else
return 0x8000000000000003uLL;
}
//
// Function: GetGcdMemoryDescriptor @ 0xd7d0
//
__int64 __fastcall GetGcdMemoryDescriptor(int n2, char *dst, __int64 a3, unsigned __int64 *p_i, const char **p__)
{
double v5; // xmm3_8
__int64 result; // rax
const char **p___1; // rbx
__int64 v12; // rdx
__int64 v13; // rcx
__int64 v14; // r8
__int64 *v15; // rax
unsigned __int64 v16; // rcx
unsigned __int64 n232; // [rsp+68h] [rbp+20h] BYREF
if ( !p_i )
return 0x8000000000000002uLL;
p___1 = p__;
if ( !p__ )
return 0x8000000000000002uLL;
*p_i = 0;
n232 = 0;
*p___1 = 0;
v13 = DxeConfig_15(n2, dst, a3, &n232, 0);
if ( v13 >= 0 || v13 == 0x8000000000000005uLL )
{
v15 = (__int64 *)Assert_112(n232, v12, v14, v5);
*p___1 = (const char *)v15;
if ( v15 )
{
result = DxeConfig_15(n2, dst, a3, &n232, v15);
v16 = n232 >> 3;
if ( result < 0 )
v16 = 0;
*p_i = v16;
}
else
{
return 0x8000000000000009uLL;
}
}
else
{
if ( v13 != 0x8000000000000002uLL )
return 0x800000000000000EuLL;
return v13;
}
return result;
}
//
// Function: DumpGcdDebugInfo @ 0xd8c8
//
__int64 __fastcall DumpGcdDebugInfo(__int64 a1, __int64 a2, __int64 a3, double a4)
{
__int64 v4; // r8
__int64 v5; // rax
int n88; // edx
unsigned __int64 v7; // rbx
unsigned __int64 n232; // rbp
__int64 v9; // rax
__int64 v10; // rax
__int64 result; // rax
unsigned __int64 __ImageBase; // [rsp+30h] [rbp+8h] BYREF
__ImageBase = -1;
if ( CoreOpenProtocol(1, 4, 0x401u, &__ImageBase) < 0 )
{
v5 = CoreOpenProtocol(0, 4, 0x401u, &__ImageBase);
if ( v5 < 0 )
{
Assert_3(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v5);
n88 = 88;
return Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
n88,
(__int64)"!EFI_ERROR (Status)",
a4);
}
}
v7 = (__ImageBase + 0x3FFFFF) & 0xFFFFFFFFFFC00000uLL;
n232 = ((v7 - __ImageBase) >> 12) + (((v7 - __ImageBase) & 0xFFF) != 0);
if ( n232 )
{
v9 = DxeConfig_35(__ImageBase, n232, v4, a4);
if ( v9 < 0 )
{
Assert_3(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v9);
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
104,
(__int64)"!EFI_ERROR (Status)",
a4);
}
}
if ( n232 != 1024 )
{
v10 = DxeConfig_35(v7 + 4096, 1024 - n232, v4, a4);
if ( v10 < 0 )
{
Assert_3(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", v10);
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
113,
(__int64)"!EFI_ERROR (Status)",
a4);
}
}
qword_26488 = v7;
if ( !v7 )
{
Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
120,
(__int64)"mDebugTable != ((void *) 0)",
a4);
v7 = qword_26488;
}
*(_DWORD *)(v7 + 16) = 0;
*(_QWORD *)v7 = 0x5453595320494249LL;
*(_QWORD *)(v7 + 8) = IBI_SYSTF_;
result = DxeConfig_17((__int64)&qword_22600, DXE_SERV__0, v4, a4);
if ( result < 0 )
{
Assert_3(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n", result);
n88 = 134;
return Assert_7(
(__int64)"e:\\hs\\MdeModulePkg\\Core\\Dxe\\Misc\\DebugImageInfo.c",
n88,
(__int64)"!EFI_ERROR (Status)",
a4);
}
return result;
}
//
// Function: FvCacheRead @ 0x19524
//
__int64 __fastcall FvCacheRead(__int64 a1, unsigned __int8 *src, __int64 n0x14)
{
unsigned int n0x1000000; // r10d
unsigned __int8 *src_2; // rdi
__int64 n7; // r14
unsigned int v7; // r9d
unsigned int n2; // r13d
__int64 v9; // rbp
unsigned int v10; // r12d
unsigned __int8 *src_1; // r11
unsigned __int64 v12; // r8
int v13; // ecx
unsigned int v15; // eax
__int64 v16; // rsi
__int64 v17; // r15
unsigned int n0x1000000_4; // r10d
__int64 v19; // rcx
unsigned int n0x100_1; // ecx
int v21; // edx
unsigned int v22; // eax
unsigned __int64 v23; // rcx
__int64 v24; // rax
unsigned int n0x100; // ebx
int v26; // ebp
unsigned int i; // esi
int v28; // edx
int v29; // ecx
unsigned int v30; // eax
int v31; // edx
unsigned int n0x1000000_1; // r10d
unsigned int n0x1000000_9; // r9d
int n16; // esi
int n3; // ebx
unsigned int n0x1000000_16; // eax
unsigned int n0x1000000_2; // r10d
__int64 n1636; // rax
unsigned int n4_1; // r1... [11560 chars total]
//
// Function: FvCacheWrite @ 0x19b34
//
__int64 __fastcall FvCacheWrite(__int64 a1, unsigned __int64 a2, char *src, unsigned __int64 *a4, int a5, _DWORD *p_n3)
{
double v6; // xmm3_8
unsigned __int64 n0x14_2; // rbp
unsigned int v8; // esi
unsigned __int64 v11; // r13
__int64 v13; // rcx
bool v14; // zf
char v15; // al
__int64 v16; // rcx
int v17; // ecx
int v18; // r8d
_WORD *v19; // rdi
__int64 i; // rcx
unsigned int n0x14; // edi
char *src_1; // r8
int n2_1; // eax
__int64 v24; // rax
unsigned int n0x14_3; // r13d
__int64 v26; // rcx
int n2; // eax
unsigned int n0x14_1; // eax
unsigned int n0x14_4; // edi
bool v31; // zf
int v33; // [rsp+70h] [rbp+28h]
n0x14_2 = *a4;
v8 = 0;
*a4 = 0;
v11 = a2;
sub_193F8(a1, a2);
v14 = *(_DWORD *)(v13 + 92) == 274;
*p_n3 = 0;
while ( 1 )
{
if ( v14 )
{
v31 = *(_DWORD *)(a1 + 44) == 0;
if ( !*(_DWORD *)(a1 + 44) )
*p_n3 = 1;
LOBYTE(v8) = !v31;
return v8;
}
if ( *(_DWORD *)(a1 + 96) )
{
if ( n0x14_2 )
{
while ( *(_DWORD *)(a1 + 108) < 5u )
{
v15 = *src++;
v16 = *(unsigned int *)(a1 + 108);
++*a4;
*(_BYTE *)(v16 + a1 + 112) = v15;
++*(_DWORD *)(a1 + 108);
if ( !--n0x14_2 )
goto LABEL_7;
}
}
else
{
LABEL_7:
if ( *(_DWORD *)(a1 + 108) < 5u )
goto LABEL_43;
}
if ( *(_BYTE *)(a1 + 112) )
return 1;
v17 = *(unsigned __int8 *)(a1 + 116)
| ((*(unsigned __int8 *)(a1 + 115)
| ((*(unsigned __int8 *)(a1 + 114) | (*(unsigned __int8 *)(a1 + 113) << 8)) << 8)) << 8);
*(_DWORD *)(a1 + 96) = 0;
*(_DWORD *)(a1 + 40) = -1;
*(_DWORD *)(a1 + 44) = v17;
*(_DWORD *)(a1 + 108) = 0;
}
v18 = 0;
v33 = 0;
if ( *(_QWORD *)(a1 + 48) < v11 )
goto LABEL_14;
if ( *(_DWORD *)(a1 + 92) )
break;
if ( !*(_DWORD *)(a1 + 44) )
{
*p_n3 = 4;
return 0;
}
v18 = 1;
v33 = 1;
LABEL_14:
if ( *(_DWORD *)(a1 + 100) )
{
v19 = *(_WORD **)(a1 + 16);
for ( i = (unsigned int)((768 << (*(_BYTE *)a1 + *(_BYTE *)(a1 + 4))) + 1846); i; --i )
*v19++ = 1024;
*(_DWORD *)(a1 + 88) = 1;
*(_DWORD *)(a1 + 84) = 1;
*(_DWORD *)(a1 + 80) = 1;
*(_DWORD *)(a1 + 76) = 1;
*(_DWORD *)(a1 + 72) = 0;
*(_DWORD *)(a1 + 100) = 0;
}
n0x14 = *(_DWORD *)(a1 + 108);
if ( n0x14 )
{
n0x14_3 = 0;
if ( n0x14 < 0x14 )
{
v26 = *(unsigned int *)(a1 + 108);
do
{
if ( n0x14_3 >= n0x14_2 )
break;
++n0x14;
*(_BYTE *)(v26 + a1 + 112) = src[n0x14_3++];
++v26;
}
while ( n0x14 < 0x14 );
}
*(_DWORD *)(a1 + 108) = n0x14;
if ( n0x14 < 0x14 || v18 )
{
n2 = FvCacheRead(a1, (unsigned __int8 *)(a1 + 112), n0x14);
if ( !n2 )
{
*a4 += n0x14_3;
LABEL_43:
*p_n3 = 3;
return 0;
}
if ( v33 && n2 != 2 )
{
LABEL_48:
*p_n3 = 2;
return 1;
}
}
*(_QWORD *)(a1 + 32) = a1 + 112;
if ( (unsigned int)sub_19484(a1, a2, a1 + 112) )
return 1;
n0x14_1 = *(_DWORD *)(a1 + 32) - a1 - 112;
if ( n0x14 < n0x14_1 )
return 11;
n0x14_4 = n0x14 - n0x14_1;
if ( n0x14_3 < n0x14_4 )
return 11;
*(_DWORD *)(a1 + 108) = 0;
v24 = n0x14_3 - n0x14_4;
v11 = a2;
src += v24;
}
else
{
if ( n0x14_2 < 0x14 || v18 )
{
n2_1 = FvCacheRead(a1, (unsigned __int8 *)src, n0x14_2);
if ( !n2_1 )
{
CopyMemWrapper((char *)(a1 + 112), src, n0x14_2, v6);
*a4 += n0x14_2;
*(_DWORD *)(a1 + 108) = n0x14_2;
goto LABEL_43;
}
if ( v33 && n2_1 != 2 )
goto LABEL_48;
src_1 = src;
}
else
{
src_1 = &src[n0x14_2 - 20];
}
*(_QWORD *)(a1 + 32) = src;
if ( (unsigned int)sub_19484(a1, v11, (unsigned __int64)src_1) )
return 1;
v24 = *(_QWORD *)(a1 + 32) - (_QWORD)src;
src = *(char **)(a1 + 32);
}
*a4 += v24;
n0x14_2 -= v24;
v14 = *(_DWORD *)(a1 + 92) == 274;
}
*p_n3 = 2;
return 1;
}
//
// Function: GetSectionFromFv @ 0x19edc
//
// local variable allocation has failed, the output may be wrong!
EFI_STATUS __cdecl GetSectionFromFv(
const EFI_GUID *NameGuid,
EFI_SECTION_TYPE SectionType,
UINTN SectionInstance,
void **Buffer,
UINTN *Size)
{
double v5; // xmm3_8
_DWORD *SectionType_1; // r14
int Data2; // eax
unsigned int v12; // ecx
SectionType_1 = (_DWORD *)SectionType;
if ( (NameGuid->Data1 & 0xFFFFFF) == 0xFFFFFF )
{
if ( !Assert_103((__int64)src_6, (__int64)NameGuid->Data4, SectionInstance, v5) )
return 0x8000000000000002uLL;
*(_WORD *)Buffer = *(_WORD *)&NameGuid[1].Data4[2];
*(_DWORD *)SectionInstance = 0;
Data2 = *(unsigned __int16 *)NameGuid[1].Data4;
v12 = *(_DWORD *)&NameGuid->Data2;
}
else
{
if ( !Assert_103((__int64)src_6, (__int64)&NameGuid->Data2, SectionInstance, v5) )
return 0x8000000000000002uLL;
*(_WORD *)Buffer = NameGuid[1].Data3;
*(_DWORD *)SectionInstance = 0;
Data2 = NameGuid[1].Data2;
v12 = NameGuid->Data1 & 0xFFFFFF;
}
*SectionType_1 = v12 - Data2;
return 0;
}