// Function: 0x370 - EFI_STATUS
EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
double v2; // xmm2_8
__int64 v4; // rdx
UefiDriverEntryPoint((__int64)ImageHandle, SystemTable); /*0x379*/
return SmbiosDataUpdateEntry(ImageHandle, v4, v2); /*0x386*/
}
// Function: 0x38C - __int64 __
__int64 __fastcall UefiDriverEntryPoint(__int64 ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
__int64 v3; // rax
__int64 v4; // rax
__int64 v5; // rax
__int64 result; // rax
__int64 v7; // rbx
::ImageHandle = ImageHandle; /*0x3a1*/
if ( !ImageHandle ) /*0x3b5*/
AssertReport( /*0x3c4*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
51,
(__int64)"gImageHandle != ((void *) 0)");
::SystemTable = (__int64)SystemTable; /*0x3c9*/
if ( !SystemTable ) /*0x3d3*/
AssertReport( /*0x3e2*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
57,
(__int64)"gST != ((void *) 0)");
BootServices = (__int64)SystemTable->BootServices; /*0x3eb*/
if ( !BootServices ) /*0x3f5*/
AssertReport( /*0x404*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiBootServicesTableLib\\UefiBootServicesTableLib.c",
63,
(__int64)"gBS != ((void *) 0)");
RuntimeServices = (__int64)SystemTable->RuntimeServices; /*0x40d*/
if ( !RuntimeServices ) /*0x417*/
AssertReport( /*0x42a*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiRuntimeServicesTableLib\\UefiRuntimeServicesTableLib.c",
47,
(__int64)"gRT != ((void *) 0)");
GetHobList(); /*0x42f*/
v3 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3890, 0, &qword_3928); /*0x44b*/
if ( v3 < 0 ) /*0x46e*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v3); /*0x478*/
AssertReport( /*0x488*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
88,
(__int64)"!EFI_ERROR (Status)");
}
v4 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3880, 0, &qword_3948); /*0x4a4*/
if ( v4 < 0 ) /*0x4ad*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v4); /*0x4b8*/
AssertReport( /*0x4c8*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
94,
(__int64)"!EFI_ERROR (Status)");
}
v5 = (*(__int64 (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_3860, 0, &unk_3938); /*0x4e4*/
if ( v5 < 0 ) /*0x4ed*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v5); /*0x4f8*/
AssertReport( /*0x508*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiServicesLib\\UefiHiiServicesLib.c",
100,
(__int64)"!EFI_ERROR (Status)");
}
(*(void (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_38C0, 0, &unk_3930); /*0x524*/
(*(void (__fastcall **)(void *, _QWORD, void *))(BootServices + 320))(&unk_3870, 0, &unk_3940); /*0x541*/
result = EfiGetSystemConfigurationTable(&TableGuid__0, (void **)&Table__0); /*0x555*/
v7 = result; /*0x55a*/
if ( result < 0 ) /*0x560*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x56b*/
result = AssertReport( /*0x57f*/
(__int64)"e:\\hs\\MdePkg\\Library\\DxeServicesTableLib\\DxeServicesTableLib.c",
64,
(__int64)"!EFI_ERROR (Status)");
}
if ( !Table__0 ) /*0x58c*/
result = AssertReport( /*0x5a1*/
(__int64)"e:\\hs\\MdePkg\\Library\\DxeServicesTableLib\\DxeServicesTableLib.c",
65,
(__int64)"gDS != ((void *) 0)");
if ( v7 < 0 ) /*0x5a9*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0x5b4*/
result = AssertReport( /*0x5c8*/
(__int64)"e:\\hs\\Build\\HR6N0XMLK\\DEBUG_VS2015\\X64\\PurleyRpPkg\\Uba\\UbaMain\\Dxe\\TypeNeonCityEPRP\\S"
"mbiosDataUpdateDxe\\SmbiosDataUpdateDxe\\DEBUG\\AutoGen.c",
295,
(__int64)"!EFI_ERROR (Status)");
}
if ( !qword_3980 ) /*0x5d5*/
{
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31D0, 0, &qword_3980); /*0x5ee*/
if ( result < 0 ) /*0x5f7*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0x602*/
result = AssertReport( /*0x616*/
(__int64)"e:\\hs\\CpRcPkg\\Library\\DxeMmPciBaseLib\\DxeMmPciBaseLib.c",
52,
(__int64)"!EFI_ERROR (Status)");
}
if ( !qword_3980 ) /*0x623*/
return AssertReport( /*0x638*/
(__int64)"e:\\hs\\CpRcPkg\\Library\\DxeMmPciBaseLib\\DxeMmPciBaseLib.c",
53,
(__int64)"mPciUsra != ((void *) 0)");
}
return result; /*0x64c*/
}
// Function: 0x654 - __int64 __
__int64 __fastcall SmbiosDataUpdateEntry(EFI_HANDLE ImageHandle, __int64 a2, double a3)
{
__int64 result; // rax
__int64 v4; // rbx
__int64 v5; // rax
_DWORD Buffer[4]; // [rsp+20h] [rbp-28h] BYREF
__int64 (*SmbiosDataUpdateCallback_1)(); // [rsp+30h] [rbp-18h]
EFI_HANDLE ImageHandle_1; // [rsp+50h] [rbp+8h] BYREF
__int64 v9; // [rsp+58h] [rbp+10h] BYREF
v9 = a2; /*0x654*/
ImageHandle_1 = ImageHandle; /*0x671*/
result = (*(__int64 (__fastcall **)(EFI_HANDLE, void *, __int64 *))(BootServices + 152))(ImageHandle, &unk_31A0, &v9); /*0x676*/
if ( result >= 0 ) /*0x67f*/
{
v4 = *(_QWORD *)(v9 + 32); /*0x696*/
DebugPrintAssertLog(0x80000000LL, "UBA:SmbiosDataUpdateEntry Image GUID=%g\n", a3); /*0x69e*/
CopyGuid(&DestinationGuid_, (const GUID *)(v4 + 4)); /*0x6ae*/
qword_38F0 = (__int64)HiiAddPackages(&DestinationGuid_, &ImageHandle_1, &unk_31F0, 0); /*0x6ce*/
if ( !qword_38F0 ) /*0x6d8*/
AssertReport( /*0x6ed*/
(__int64)"e:\\hs\\PurleyRpPkg\\Uba\\UbaMain\\Dxe\\TypeNeonCityEPRP\\SmbiosDataUpdateDxe\\SmbiosDataUpdateDxe.c",
625,
(__int64)"gSmbiosStringPackHandle != ((void *) 0)");
ZeroMem(Buffer, 0x18u); /*0x6fe*/
Buffer[3] = 0; /*0x703*/
Buffer[2] = 0; /*0x70f*/
SmbiosDataUpdateCallback_1 = SmbiosDataUpdateCallback; /*0x714*/
v5 = qword_3960; /*0x719*/
if ( !qword_3960 ) /*0x723*/
{
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31E0, 0, &qword_3960); /*0x73c*/
if ( result < 0 ) /*0x745*/
return result; /*0x745*/
v5 = qword_3960; /*0x747*/
}
Buffer[0] = 1112363856; /*0x751*/
Buffer[1] = 1; /*0x75e*/
return (*(__int64 (__fastcall **)(__int64, void *, _DWORD *, __int64))(v5 + 16))(v5, &unk_38E0, Buffer, 24); /*0x770*/
}
return result; /*0x773*/
}
// Function: 0xF54 - __int64 Sm
__int64 SmbiosDataUpdateCallback()
{
void *ZeroPool; // rbx
unsigned __int64 i; // rdi
__int64 v2; // rdx
unsigned __int64 j; // rdi
__int64 v4; // rdx
unsigned __int64 k; // rdi
__int64 v6; // rdx
__int64 updated; // rsi
ZeroPool = AllocateZeroPool(0x300u); /*0xf74*/
for ( i = 0; i < 0x1E; ++i ) /*0xf77*/
{
ZeroMem(ZeroPool, 0x300u); /*0xf84*/
if ( UpdateSmbiosType9SystemSlots((__int64)ZeroPool, v2, i) >= 0 ) /*0xf97*/
UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0xf9c*/
}
UbaSmbiosDeleteAllKeysOfType(9); /*0xfac*/
for ( j = 0; j < 8; ++j ) /*0xfb1*/
{
ZeroMem(ZeroPool, 0x300u); /*0xfbe*/
if ( UpdateSmbiosType41OnboardDevices((__int64)ZeroPool, v4, j) >= 0 ) /*0xfd1*/
UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0xfd6*/
}
UbaSmbiosDeleteAllKeysOfType(41); /*0xfe6*/
for ( k = 0; k < 4; ++k ) /*0xfeb*/
{
ZeroMem(ZeroPool, 0x300u); /*0xff8*/
updated = UpdateSmbiosTypeUnknownExtended((__int64)ZeroPool, v6, k); /*0x1008*/
if ( updated >= 0 ) /*0x100e*/
updated = UbaSmbiosFlushStringPack((__int64)ZeroPool); /*0x1018*/
}
AllocateZeroPool_1(ZeroPool); /*0x1027*/
return updated; /*0x103e*/
}
// Function: 0x77C - __int64 __
__int64 __fastcall UpdateSmbiosType9SystemSlots(_WORD *ZeroPool, __int64 a2, const CHAR8 *i)
{
unsigned __int64 v4; // rbx
char v5; // cl
unsigned __int8 v6; // si
unsigned __int8 v7; // r14
EFI_STRING_ID StringId; // dx
char v9; // cl
EFI_STRING Buffer_2; // rax
__int64 v11; // rdx
EFI_STRING Buffer; // rdi
unsigned __int64 v13; // r8
EFI_STRING_ID StringId_1; // dx
EFI_STRING Buffer_3; // rax
__int64 v16; // rdx
EFI_STRING Buffer_1; // rbx
int n2; // [rsp+20h] [rbp-99h]
int n134283264; // [rsp+24h] [rbp-95h]
_BYTE v20[2]; // [rsp+28h] [rbp-91h]
int n3; // [rsp+2Ah] [rbp-8Fh]
int n134283264_1; // [rsp+2Eh] [rbp-8Bh]
char n8; // [rsp+32h] [rbp-87h]
int n4; // [rsp+34h] [rbp-85h]
int n302055424; // [rsp+38h] [rbp-81h]
char n16; // [rsp+3Ch] [rbp-7Dh]
int n5; // [rsp+3Eh] [rbp-7Bh]
int n302055424_1; // [rsp+42h] [rbp-77h]
char n16_1; // [rsp+46h] [rbp-73h]
int n6; // [rsp+48h] [rbp-71h]
int n302055424_2; // [rsp+4Ch] [rbp-6Dh]
char n16_2; // [rsp+50h] [rbp-69h]
int n7; // [rsp+52h] [rbp-67h]
int n117506048; // [rsp+56h] [rbp-63h]
char n28; // [rsp+5Ah] [rbp-5Fh]
int n8_1; // [rsp+5Ch] [rbp-5Dh]
int n117506048_1; // [rsp+60h] [rbp-59h]
char n28_1; // [rsp+64h] [rbp-55h]
int n9; // [rsp+66h] [rbp-53h]
int n184614912; // [rsp+6Ah] [rbp-4Fh]
char n31; // [rsp+6Eh] [rbp-4Bh]
int n10; // [rsp+70h] [rbp-49h]
int n184614912_1; // [rsp+74h] [rbp-45h]
char n31_1; // [rsp+78h] [rbp-41h]
int n11; // [rsp+7Ah] [rbp-3Fh]
int n184614912_2; // [rsp+7Eh] [rbp-3Bh]
char n31_2; // [rsp+82h] [rbp-37h]
int n12; // [rsp+84h] [rbp-35h]
int n4609; // [rsp+88h] [rbp-31h]
char n16_3; // [rsp+8Ch] [rbp-2Dh]
int n13; // [rsp+8Eh] [rbp-2Bh]
int n4609_1; // [rsp+92h] [rbp-27h]
char n16_4; // [rsp+96h] [rbp-23h]
int n14; // [rsp+98h] [rbp-21h]
int n65281; // [rsp+9Ch] [rbp-1Dh]
char v56; // [rsp+A0h] [rbp-19h]
int n15; // [rsp+A2h] [rbp-17h]
int n8705; // [rsp+A6h] [rbp-13h]
char n32; // [rsp+AAh] [rbp-Fh]
int n16_5; // [rsp+ACh] [rbp-Dh]
int n8705_1; // [rsp+B0h] [rbp-9h]
char n32_1; // [rsp+B4h] [rbp-5h]
int n17; // [rsp+B6h] [rbp-3h]
int n8705_2; // [rsp+BAh] [rbp+1h]
char n32_2; // [rsp+BEh] [rbp+5h]
int n18; // [rsp+C0h] [rbp+7h]
int n8705_3; // [rsp+C4h] [rbp+Bh]
char n32_3; // [rsp+C8h] [rbp+Fh]
int n19; // [rsp+CAh] [rbp+11h]
int n8705_4; // [rsp+CEh] [rbp+15h]
char n32_4; // [rsp+D2h] [rbp+19h]
int n20; // [rsp+D4h] [rbp+1Bh]
int n8705_5; // [rsp+D8h] [rbp+1Fh]
char n32_5; // [rsp+DCh] [rbp+23h]
int n21; // [rsp+DEh] [rbp+25h]
int n8705_6; // [rsp+E2h] [rbp+29h]
char n32_6; // [rsp+E6h] [rbp+2Dh]
int n22; // [rsp+E8h] [rbp+2Fh]
int n8705_7; // [rsp+ECh] [rbp+33h]
char n33; // [rsp+F0h] [rbp+37h]
_BYTE *ZeroPool_1; // [rsp+120h] [rbp+67h]
ZeroPool_1 = ZeroPool; /*0x78b*/
n2 = 2; /*0x7a5*/
n134283264 = 134283264; /*0x7ad*/
v20[0] = 8; /*0x7b5*/
n3 = 3; /*0x7ba*/
n134283264_1 = 134283264; /*0x7c6*/
n8 = 8; /*0x7d2*/
n4 = 4; /*0x7da*/
n302055424 = 302055424; /*0x7e2*/
n16 = 16; /*0x7ea*/
n5 = 5; /*0x7ee*/
n302055424_1 = 302055424; /*0x7f5*/
n16_1 = 16; /*0x7fc*/
n6 = 6; /*0x800*/
n302055424_2 = 302055424; /*0x807*/
n16_2 = 16; /*0x80e*/
n7 = 7; /*0x812*/
n117506048 = 117506048; /*0x819*/
n28 = 28; /*0x820*/
n8_1 = 8; /*0x824*/
n117506048_1 = 117506048; /*0x828*/
n28_1 = 28; /*0x82f*/
n9 = 9; /*0x833*/
n184614912 = 184614912; /*0x836*/
n31 = 31; /*0x83d*/
n10 = 10; /*0x841*/
n184614912_1 = 184614912; /*0x848*/
n31_1 = 31; /*0x84f*/
n11 = 11; /*0x853*/
n184614912_2 = 184614912; /*0x85a*/
n31_2 = 31; /*0x861*/
n12 = 12; /*0x865*/
n4609 = 4609; /*0x86c*/
n16_3 = 16; /*0x873*/
n13 = 13; /*0x877*/
n4609_1 = 4609; /*0x87e*/
n16_4 = 16; /*0x885*/
n14 = 14; /*0x889*/
n65281 = 65281; /*0x890*/
v56 = -1; /*0x897*/
n15 = 15; /*0x89b*/
n8705 = 8705; /*0x8a2*/
n32 = 32; /*0x8a9*/
n16_5 = 16; /*0x8ad*/
n8705_1 = 8705; /*0x8b1*/
n32_1 = 32; /*0x8b8*/
n17 = 17; /*0x8bc*/
n8705_2 = 8705; /*0x8c3*/
n32_2 = 32; /*0x8ca*/
n18 = 18; /*0x8ce*/
n8705_3 = 8705; /*0x8d5*/
n32_3 = 32; /*0x8dc*/
n19 = 19; /*0x8e0*/
n8705_4 = 8705; /*0x8e7*/
n32_4 = 32; /*0x8ee*/
n20 = 20; /*0x8f2*/
n8705_5 = 8705; /*0x8f9*/
n32_5 = 32; /*0x900*/
n21 = 21; /*0x904*/
n8705_6 = 8705; /*0x907*/
n32_6 = 32; /*0x90e*/
n22 = 22; /*0x912*/
n8705_7 = 8705; /*0x919*/
n33 = 33; /*0x920*/
if ( (unsigned __int64)i >= 0x15 ) /*0x927*/
return 0x8000000000000002uLL; /*0x933*/
ZeroPool[1] = -2; /*0x93d*/
*(_BYTE *)ZeroPool = 8; /*0x945*/
*((_BYTE *)ZeroPool + 1) = 9; /*0x94c*/
v4 = 5LL * (_QWORD)i; /*0x94f*/
v5 = v20[10 * (_QWORD)i - 3]; /*0x957*/
v6 = v20[10 * (_QWORD)i - 4]; /*0x95b*/
v7 = v20[10 * (_QWORD)i - 2]; /*0x960*/
StringId = *((_WORD *)&n2 + 5 * (_QWORD)i); /*0x965*/
ZeroPool_1[4] = v6; /*0x96a*/
ZeroPool_1[5] = v5; /*0x972*/
v9 = v20[10 * (_QWORD)i - 1]; /*0x979*/
ZeroPool_1[6] = v7; /*0x97d*/
ZeroPool_1[7] = v9; /*0x985*/
LOBYTE(ZeroPool) = v20[10 * (_QWORD)i]; /*0x98c*/
ZeroPool_1[8] = (_BYTE)ZeroPool; /*0x990*/
if ( StringId ) /*0x996*/
{
Buffer_2 = HiiGetString(ZeroPool, StringId, i); /*0x998*/
Buffer = Buffer_2; /*0x99d*/
if ( !Buffer_2 ) /*0x9a3*/
return 0x8000000000000009uLL; /*0x9af*/
v13 = v6; /*0x9b8*/
if ( !v6 ) /*0x9bf*/
v13 = v7; /*0x9c1*/
UbaSmbiosUpdateStringReplace((__int64)ZeroPool_1, v11, v13, (__int64)Buffer_2); /*0x9c5*/
AllocateZeroPool_1(Buffer); /*0x9cd*/
}
StringId_1 = *((_WORD *)&n2 + v4 + 1); /*0x9d2*/
if ( StringId_1 ) /*0x9da*/
{
Buffer_3 = HiiGetString(ZeroPool, StringId_1, i); /*0x9dc*/
Buffer_1 = Buffer_3; /*0x9e1*/
if ( !Buffer_3 ) /*0x9e7*/
return 0x8000000000000009uLL; /*0x9e7*/
UbaSmbiosUpdateStringReplace((__int64)ZeroPool_1, v16, v7, (__int64)Buffer_3); /*0x9f4*/
AllocateZeroPool_1(Buffer_1); /*0x9fc*/
}
return 0; /*0xa17*/
}
// Function: 0xA20 - __int64 __
__int64 __fastcall UpdateSmbiosType41OnboardDevices(_WORD *ZeroPool, __int64 a2, unsigned __int64 j)
{
__int64 v3; // r8
__int64 v4; // r8
__int64 v5; // r8
__int64 v6; // r8
__int64 v8; // rax
unsigned int *v9; // rax
const CHAR8 *Language; // r8
EFI_STRING_ID n23; // dx
__int64 v12; // rax
unsigned int *v13; // rax
void *HiiHandle; // rcx
char n3; // r14
__int64 v16; // rax
__int64 v17; // rax
unsigned int *v18; // rax
char n2; // r8
__int64 v20; // rax
CHAR16 *Buffer; // rax
__int64 v22; // rdx
CHAR16 *Buffer_1; // rbx
ZeroPool[1] = -2; /*0xa43*/
*(_BYTE *)ZeroPool = 9; /*0xa52*/
*((_BYTE *)ZeroPool + 1) = 17; /*0xa59*/
*((_BYTE *)ZeroPool + 15) = 0; /*0xa61*/
*((_BYTE *)ZeroPool + 4) = 1; /*0xa69*/
*((_BYTE *)ZeroPool + 8) = 4; /*0xa70*/
*((_BYTE *)ZeroPool + 11) |= 4u; /*0xa77*/
*((_BYTE *)ZeroPool + 12) |= 1u; /*0xa7e*/
*((_BYTE *)ZeroPool + 12) |= 4u; /*0xa85*/
*(_WORD *)((char *)ZeroPool + 13) = 0; /*0xa8c*/
if ( !j ) /*0xa94*/
{
n2 = 0; /*0xd01*/
*(_WORD *)((char *)ZeroPool + 9) = 1; /*0xd04*/
*((_BYTE *)ZeroPool + 5) = -74; /*0xd10*/
*((_BYTE *)ZeroPool + 6) = 13; /*0xd18*/
*((_BYTE *)ZeroPool + 15) = 0; /*0xd20*/
*((_BYTE *)ZeroPool + 16) = 24; /*0xd28*/
goto LABEL_21; /*0xd28*/
}
v3 = j - 1; /*0xa9a*/
if ( !v3 ) /*0xa9d*/
{
*(_WORD *)((char *)ZeroPool + 9) = 3; /*0xcb2*/
*((_BYTE *)ZeroPool + 5) = -75; /*0xcbe*/
*((_BYTE *)ZeroPool + 6) = 11; /*0xcc6*/
*((_BYTE *)ZeroPool + 15) = 0; /*0xcce*/
*((_BYTE *)ZeroPool + 16) = 26; /*0xcd6*/
if ( *(_DWORD *)PciWriteMmPciUsra(0, 3, 2) == -1 ) /*0xce4*/
return 0x8000000000000007uLL; /*0xce4*/
n2 = 2; /*0xcf5*/
LABEL_21:
v20 = PciWriteMmPciUsra(0, 3, n2); /*0xd2c*/
v9 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v20 + 25), 0, 0); /*0xd3e*/
n23 = 23; /*0xd43*/
LABEL_22:
HiiHandle = (void *)*v9; /*0xd48*/
LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xd50*/
goto LABEL_23; /*0xd50*/
}
v4 = v3 - 1; /*0xaa3*/
if ( !v4 ) /*0xaa6*/
{
*(_WORD *)((char *)ZeroPool + 9) = 4; /*0xc50*/
*((_BYTE *)ZeroPool + 5) = -74; /*0xc5d*/
*((_BYTE *)ZeroPool + 6) = 13; /*0xc65*/
*((_BYTE *)ZeroPool + 15) = 0x80; /*0xc6d*/
*((_BYTE *)ZeroPool + 16) = 8; /*0xc75*/
v17 = PciWriteMmPciUsra(0x80u, 1, 0); /*0xc7d*/
v18 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v17 + 25), 0, 0); /*0xc8b*/
n23 = 24; /*0xc90*/
HiiHandle = (void *)*v18; /*0xc95*/
LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xc9d*/
goto LABEL_23; /*0xca0*/
}
v5 = v4 - 1; /*0xaac*/
if ( !v5 ) /*0xaaf*/
{
*(_WORD *)((char *)ZeroPool + 9) = 6; /*0xba7*/
*((_BYTE *)ZeroPool + 5) = -75; /*0xbb5*/
*((_BYTE *)ZeroPool + 6) = 11; /*0xbbd*/
*((_BYTE *)ZeroPool + 15) = 0x80; /*0xbc5*/
*((_BYTE *)ZeroPool + 16) = 16; /*0xbcd*/
n3 = *(_BYTE *)(PciWriteMmPciUsra(0x80u, 2, 0) + 400); /*0xbdb*/
if ( n3 == 3 ) /*0xbe5*/
{
*(_WORD *)((char *)ZeroPool + 9) = 5; /*0xbee*/
*((_BYTE *)ZeroPool + 5) = -74; /*0xbf6*/
*((_BYTE *)ZeroPool + 6) = 11; /*0xbfe*/
}
v16 = PciWriteMmPciUsra(0x80u, 2, 0); /*0xc0c*/
HiiHandle = (void *)*(unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v16 + 25), 0, 0); /*0xc1f*/
LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xc2b*/
*((_BYTE *)ZeroPool + 7) = (_BYTE)HiiHandle; /*0xc2d*/
if ( n3 == 3 ) /*0xc33*/
n23 = 26; /*0xc35*/
else
n23 = 25; /*0xc3f*/
goto LABEL_24; /*0xc3a*/
}
v6 = v5 - 1; /*0xab5*/
if ( v6 ) /*0xab8*/
{
if ( v6 != 1 ) /*0xabd*/
return 0x8000000000000002uLL; /*0xac9*/
*(_WORD *)((char *)ZeroPool + 9) = 8; /*0xad7*/
*((_BYTE *)ZeroPool + 5) = -75; /*0xaeb*/
*((_BYTE *)ZeroPool + 6) = 11; /*0xaf3*/
*((_BYTE *)ZeroPool + 15) = 0x80; /*0xafb*/
*((_BYTE *)ZeroPool + 16) = 26; /*0xb03*/
v8 = PciWriteMmPciUsra(0x80u, 3, 2); /*0xb07*/
v9 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v8 + 25), 0, 0); /*0xb15*/
n23 = 27; /*0xb1a*/
goto LABEL_22; /*0xb1d*/
}
*(_WORD *)((char *)ZeroPool + 9) = 7; /*0xb2b*/
*((_BYTE *)ZeroPool + 5) = -76; /*0xb3c*/
*((_BYTE *)ZeroPool + 6) = 10; /*0xb44*/
*((_BYTE *)ZeroPool + 15) = 0x80; /*0xb4c*/
*((_BYTE *)ZeroPool + 16) = 18; /*0xb54*/
if ( *(_DWORD *)PciWriteMmPciUsra(0x80u, 2, 2) == -1 ) /*0xb62*/
return 0x8000000000000007uLL; /*0xcf0*/
v12 = PciWriteMmPciUsra(0x80u, 2, 2); /*0xb73*/
v13 = (unsigned int *)PciWriteMmPciUsra(*(_BYTE *)(v12 + 25), 0, 0); /*0xb81*/
n23 = 25; /*0xb86*/
HiiHandle = (void *)*v13; /*0xb8b*/
LOBYTE(HiiHandle) = ((_DWORD)HiiHandle != -1) + 3; /*0xb93*/
LABEL_23:
*((_BYTE *)ZeroPool + 7) = (_BYTE)HiiHandle; /*0xd52*/
LABEL_24:
Buffer = HiiGetString(HiiHandle, n23, Language); /*0xd59*/
Buffer_1 = Buffer; /*0xd5e*/
if ( Buffer ) /*0xd64*/
{
UbaSmbiosUpdateStringReplace(ZeroPool, v22, *((unsigned __int8 *)ZeroPool + 4), Buffer); /*0xd72*/
AllocateZeroPool_1(Buffer_1); /*0xd7a*/
}
return 0; /*0xd90*/
}
// Function: 0xD98 - __int64 __
__int64 __fastcall UpdateSmbiosTypeUnknownExtended(char *ZeroPool, __int64 a2, unsigned __int64 k)
{
__int64 v3; // r8
__int64 v4; // r8
unsigned int *v6; // rax
const CHAR8 *Language; // r8
EFI_STRING_ID n28; // dx
void *HiiHandle; // rcx
unsigned __int8 v10; // bl
unsigned int *v11; // rax
char n10; // dl
unsigned int *v13; // rax
char n5; // dl
char n3; // di
unsigned int *v16; // rax
CHAR16 *Buffer; // rax
__int64 v18; // rdx
CHAR16 *Buffer_1; // rbx
*((_WORD *)ZeroPool + 1) = -2; /*0xdbb*/
*ZeroPool = 41; /*0xdc3*/
ZeroPool[1] = 11; /*0xdca*/
ZeroPool[4] = 1; /*0xdd2*/
*(_WORD *)(ZeroPool + 7) = 0; /*0xdda*/
if ( !k ) /*0xde2*/
{
n3 = 3; /*0xecb*/
v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 28, 3) + 25); /*0xee2*/
v16 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xee8*/
n28 = 28; /*0xeed*/
HiiHandle = (void *)*v16; /*0xef2*/
if ( (_DWORD)HiiHandle != -1 ) /*0xefc*/
n3 = -125; /*0xefc*/
ZeroPool[5] = n3; /*0xf03*/
goto LABEL_18; /*0xf03*/
}
v3 = k - 1; /*0xde8*/
if ( !v3 ) /*0xdec*/
{
v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 2, 2) + 25); /*0xea0*/
v13 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xea6*/
n5 = 5; /*0xeab*/
HiiHandle = (void *)*v13; /*0xeb0*/
if ( (_DWORD)HiiHandle != -1 ) /*0xeba*/
n5 = -123; /*0xeba*/
ZeroPool[5] = n5; /*0xec1*/
n28 = 29; /*0xec4*/
goto LABEL_18; /*0xec9*/
}
v4 = v3 - 1; /*0xdf2*/
if ( !v4 ) /*0xdf6*/
{
v10 = *(_BYTE *)(PciWriteMmPciUsra(0, 1, 0) + 25); /*0xe61*/
v11 = (unsigned int *)PciWriteMmPciUsra(v10, 0, 0); /*0xe67*/
n10 = 10; /*0xe6c*/
HiiHandle = (void *)*v11; /*0xe71*/
if ( (_DWORD)HiiHandle != -1 ) /*0xe7b*/
n10 = -118; /*0xe7b*/
ZeroPool[5] = n10; /*0xe82*/
n28 = 30; /*0xe85*/
LABEL_18:
ZeroPool[9] = v10; /*0xf07*/
ZeroPool[10] = 0; /*0xf12*/
goto LABEL_19; /*0xf12*/
}
if ( v4 != 1 ) /*0xdfc*/
return 0x8000000000000002uLL; /*0xe08*/
v6 = (unsigned int *)PciWriteMmPciUsra(0, 31, 2); /*0xe1a*/
Language = (_BYTE *)(&word_8 + 1); /*0xe1f*/
n28 = 31; /*0xe23*/
HiiHandle = (void *)*v6; /*0xe25*/
if ( (_DWORD)HiiHandle != -1 ) /*0xe2d*/
Language = byte_40 + 73; /*0xe2d*/
ZeroPool[5] = (char)Language; /*0xe35*/
ZeroPool[9] = 0; /*0xe3d*/
ZeroPool[10] = -6; /*0xe45*/
LABEL_19:
Buffer = HiiGetString(HiiHandle, n28, Language); /*0xf16*/
Buffer_1 = Buffer; /*0xf1b*/
if ( Buffer ) /*0xf21*/
{
UbaSmbiosUpdateStringReplace(ZeroPool, v18, 1u, Buffer); /*0xf30*/
AllocateZeroPool_1(Buffer_1); /*0xf38*/
}
return 0; /*0xf4e*/
}
// Function: 0x1AE8 - unsigned _
unsigned __int64 __fastcall UbaSmbiosUpdateStringReplace(
char *ZeroPool,
__int64 a2,
unsigned __int64 a3,
EFI_STRING Buffer)
{
UINTN AllocationSize; // r14
CHAR8 *SourceBuffer_3; // rax
CHAR8 *SourceBuffer; // rdi
UINTN v10; // r15
__int64 v11; // rcx
__int64 v12; // r14
CHAR8 *SourceBuffer_2; // rbx
unsigned __int64 v14; // rax
UINTN v15; // rax
UINTN v16; // rsi
UINTN n0xF4240; // rsi
const char *(Destination____((void__)_0)); // r8
__int64 n1820; // rdx
unsigned __int64 v20; // rbx
UINTN n0xF4240_1; // rax
UINTN n0xF4240_2; // r14
CHAR8 v23; // al
signed __int64 v24; // rdi
char *DestinationBuffer; // rax
char *SourceBuffer_1; // rbx
UINTN Length; // [rsp+20h] [rbp-10h] BYREF
void *ZeroPool_2; // [rsp+28h] [rbp-8h] BYREF
char *ZeroPool_1; // [rsp+60h] [rbp+30h] BYREF
__int64 Length_1; // [rsp+68h] [rbp+38h] BYREF
ZeroPool_1 = ZeroPool; /*0x1af2*/
Length_1 = 0; /*0x1b05*/
Length = 0; /*0x1b0f*/
AllocationSize = StrLen(Buffer) + 1; /*0x1b22*/
SourceBuffer_3 = (CHAR8 *)AllocateZeroPool(AllocationSize); /*0x1b29*/
SourceBuffer = SourceBuffer_3; /*0x1b2e*/
if ( !SourceBuffer_3 ) /*0x1b34*/
{
AssertReport( /*0x1b47*/
(__int64)"e:\\hs\\PurleyPlatPkg\\Library\\UbaPlatLib\\UbaSmbiosUpdateLib.c",
120,
(__int64)"AsciiString != ((void *) 0)");
return 0x8000000000000009uLL; /*0x1b56*/
}
StrToAsciiStr(Buffer, SourceBuffer_3, AllocationSize); /*0x1b64*/
v10 = AsciiStrLen(SourceBuffer); /*0x1b75*/
UbaSmbiosFindStringBlockEnd((__int64 *)&ZeroPool_1, &Length_1); /*0x1b7c*/
v11 = 1; /*0x1b85*/
v12 = 0; /*0x1b8a*/
SourceBuffer_2 = &ZeroPool_1[(unsigned __int8)ZeroPool_1[1]]; /*0x1b91*/
if ( a3 > 1 ) /*0x1b97*/
{
do /*0x1bb0*/
{
v14 = v11 + 1; /*0x1b9c*/
if ( *SourceBuffer_2 ) /*0x1b99*/
v14 = v11; /*0x1ba0*/
++SourceBuffer_2; /*0x1ba4*/
++v12; /*0x1ba7*/
v11 = v14; /*0x1baa*/
}
while ( v14 < a3 ); /*0x1bb0*/
}
v15 = AsciiStrLen(SourceBuffer_2); /*0x1bb5*/
v16 = v15; /*0x1bba*/
if ( v10 != v15 ) /*0x1bc0*/
{
DestinationBuffer = (char *)AllocateZeroPool(0x300u); /*0x1d0c*/
ZeroPool_2 = DestinationBuffer; /*0x1d11*/
SourceBuffer_1 = DestinationBuffer; /*0x1d15*/
if ( !DestinationBuffer ) /*0x1d1b*/
return 0x8000000000000009uLL; /*0x1d1b*/
CopyMem(DestinationBuffer, ZeroPool_1, v12 + (unsigned __int8)ZeroPool_1[1]); /*0x1d30*/
CopyMem(&SourceBuffer_1[(unsigned __int8)ZeroPool_1[1] + v12], SourceBuffer, v10 + 1); /*0x1d4a*/
CopyMem( /*0x1d83*/
&SourceBuffer_1[(unsigned __int8)ZeroPool_1[1] + 1 + v12 + v10],
&ZeroPool_1[v12 + 1 + (unsigned __int8)ZeroPool_1[1] + v16],
Length_1 - (unsigned __int8)ZeroPool_1[1] - v16 - v12 - 1);
UbaSmbiosFindStringBlockEnd((__int64 *)&ZeroPool_2, &Length); /*0x1d90*/
CopyMem(ZeroPool_1, SourceBuffer_1, Length); /*0x1da0*/
AllocateZeroPool_1(SourceBuffer_1); /*0x1da8*/
AllocateZeroPool_1(SourceBuffer); /*0x1db0*/
return 0; /*0x1db0*/
}
n0xF4240 = v15 + 1; /*0x1bc6*/
if ( !SourceBuffer_2 ) /*0x1bcc*/
{
(Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x1bce*/
n1820 = 1820; /*0x1bd5*/
LABEL_11:
AssertReport( /*0x1bda*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
n1820,
(__int64)(Destination____((void__)_0)));
v20 = 0x8000000000000002uLL; /*0x1be6*/
LABEL_28:
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v20); /*0x1cb6*/
AssertReport( /*0x1cdd*/
(__int64)"e:\\hs\\PurleyPlatPkg\\Library\\UbaPlatLib\\UbaSmbiosUpdateLib.c",
148,
(__int64)"!EFI_ERROR (Status)");
return v20; /*0x1ce5*/
}
if ( n0xF4240 > 0xF4240 ) /*0x1bfc*/
{
(Destination____((void__)_0)) = "(DestMax <= (_gPcd_FixedAtBuild_PcdMaximumAsciiStringLength))"; /*0x1bfe*/
n1820 = 1827; /*0x1c05*/
goto LABEL_11; /*0x1c0a*/
}
if ( v15 == -1 ) /*0x1c0f*/
{
(Destination____((void__)_0)) = "(DestMax != 0)"; /*0x1c11*/
n1820 = 1833; /*0x1c18*/
goto LABEL_11; /*0x1c1d*/
}
n0xF4240_1 = AsciiStrnLenS(SourceBuffer, n0xF4240); /*0x1c25*/
n0xF4240_2 = n0xF4240_1; /*0x1c2a*/
if ( n0xF4240 <= n0xF4240_1 ) /*0x1c30*/
{
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 1839, (__int64)"(DestMax > SourceLen)"); /*0x1c45*/
v20 = 0x8000000000000005uLL; /*0x1c4a*/
goto LABEL_28; /*0x1c54*/
}
if ( SourceBuffer > SourceBuffer_2 ) /*0x1c59*/
goto LABEL_21; /*0x1c59*/
if ( SourceBuffer_2 >= &SourceBuffer[n0xF4240_1 + 1] ) /*0x1c65*/
{
if ( SourceBuffer_2 > SourceBuffer ) /*0x1c6a*/
goto LABEL_24; /*0x1c6a*/
LABEL_21:
if ( SourceBuffer >= &SourceBuffer_2[n0xF4240] ) /*0x1c73*/
goto LABEL_23; /*0x1c73*/
}
AssertReport( /*0x1c75*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
1844,
(__int64)"InternalSafeStringNoAsciiStrOverlap (Destination, DestMax, (CHAR8 *)Source, SourceLen + 1)");
LABEL_23:
if ( SourceBuffer <= SourceBuffer_2 ) /*0x1c90*/
{
LABEL_24:
if ( SourceBuffer_2 < &SourceBuffer[n0xF4240_2 + 1] ) /*0x1c9c*/
{
LABEL_27:
v20 = 0x800000000000000FuLL; /*0x1cac*/
goto LABEL_28; /*0x1cac*/
}
if ( SourceBuffer < SourceBuffer_2 ) /*0x1ca1*/
goto LABEL_29; /*0x1ca1*/
}
if ( SourceBuffer < &SourceBuffer_2[n0xF4240] ) /*0x1caa*/
goto LABEL_27; /*0x1caa*/
LABEL_29:
v23 = *SourceBuffer; /*0x1cea*/
if ( *SourceBuffer ) /*0x1cea*/
{
v24 = SourceBuffer - SourceBuffer_2; /*0x1cf0*/
do /*0x1cfd*/
{
*SourceBuffer_2++ = v23; /*0x1cf3*/
v23 = SourceBuffer_2[v24]; /*0x1cf8*/
}
while ( v23 ); /*0x1cfd*/
}
*SourceBuffer_2 = 0; /*0x1cff*/
return 0; /*0x1dbc*/
}
// Function: 0x176C - EFI_STRING
EFI_STRING __cdecl HiiGetString(EFI_HII_HANDLE HiiHandle, EFI_STRING_ID StringId, const CHAR8 *Language)
{
void *HiiHandle_2; // rsi
void *ZeroPool; // rbx
__int64 v6; // rcx
CHAR8 *SupportedLanguages; // rbp
unsigned __int64 n24; // r8
void *HiiHandle_3; // r9
CHAR8 *BestLanguage; // rdi
EFI_HII_HANDLE HiiHandle_1; // [rsp+70h] [rbp+8h] BYREF
const CHAR8 *Language_1; // [rsp+80h] [rbp+18h] BYREF
UINTN AllocationSize; // [rsp+88h] [rbp+20h] BYREF
Language_1 = Language; /*0x1771*/
HiiHandle_1 = HiiHandle; /*0x1776*/
HiiHandle_2 = (void *)::HiiHandle; /*0x1786*/
if ( !::HiiHandle ) /*0x1797*/
AssertReport( /*0x17ac*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c",
238,
(__int64)"HiiHandle != ((void *) 0)");
if ( !StringId ) /*0x17b5*/
AssertReport((__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiString.c", 239, (__int64)"StringId != 0"); /*0x17ca*/
HiiHandle_1 = 0; /*0x17d2*/
ZeroPool = 0; /*0x17d7*/
SupportedLanguages = HiiGetSupportedLanguages(HiiHandle_2); /*0x17df*/
if ( SupportedLanguages ) /*0x17e5*/
{
GetPlatformLangVariable(v6, (__int64 *)&HiiHandle_1, n24); /*0x17f0*/
HiiHandle_3 = &unk_2AFA; /*0x1801*/
if ( HiiHandle_1 ) /*0x1809*/
HiiHandle_3 = HiiHandle_1; /*0x1809*/
BestLanguage = GetBestLanguage(SupportedLanguages, 0, &unk_2AFA, HiiHandle_3, SupportedLanguages, 0); /*0x181e*/
if ( BestLanguage ) /*0x1824*/
{
AllocationSize = 0; /*0x1848*/
if ( (*(__int64 (__fastcall **)(__int64, CHAR8 *, void *, _QWORD, const CHAR8 **, UINTN *, _QWORD))(qword_3928 + 8))( /*0x1875*/
qword_3928,
BestLanguage,
HiiHandle_2,
StringId,
&Language_1,
&AllocationSize,
0) == 0x8000000000000005uLL )
{
ZeroPool = AllocateZeroPool(AllocationSize); /*0x1884*/
if ( ZeroPool ) /*0x188a*/
{
if ( (*(__int64 (__fastcall **)(__int64, CHAR8 *, void *, _QWORD, void *, UINTN *, _QWORD))(qword_3928 + 8))( /*0x18be*/
qword_3928,
BestLanguage,
HiiHandle_2,
StringId,
ZeroPool,
&AllocationSize,
0) < 0 )
{
AllocateZeroPool_1(ZeroPool); /*0x18c3*/
ZeroPool = 0; /*0x18c8*/
}
}
}
}
AllocateZeroPool_1(SupportedLanguages); /*0x18ce*/
if ( HiiHandle_1 ) /*0x18d8*/
AllocateZeroPool_1(HiiHandle_1); /*0x18df*/
if ( BestLanguage ) /*0x18e7*/
AllocateZeroPool_1(BestLanguage); /*0x18ec*/
}
return (EFI_STRING)ZeroPool; /*0x18f9*/
}
// Function: 0x1908 - EFI_HII_HA
EFI_HII_HANDLE HiiAddPackages(const EFI_GUID *PackageListGuid, EFI_HANDLE DeviceHandle, ...)
{
const UINT32 *Buffer_1; // rsi
int v5; // ebx
const UINT32 *Buffer; // rax
const UINT32 **v7; // rdi
unsigned int AllocationSize; // ebx
GUID *ZeroPool; // rax
GUID *ZeroPool_1; // rdi
unsigned __int16 *p_Data2; // rbp
const UINT32 **v12; // r15
UINTN Length; // rbx
__int64 v14; // rax
__int64 v15; // rcx
__int64 v17[9]; // [rsp+20h] [rbp-48h] BYREF
const UINT32 *Buffer_2; // [rsp+80h] [rbp+18h] BYREF
va_list va1; // [rsp+88h] [rbp+20h] BYREF
va_list va; // [rsp+80h] [rbp+18h]
va_start(va1, DeviceHandle);
va_start(va, DeviceHandle);
Buffer_2 = va_arg(va1, const UINT32 *); /*0x1908*/
if ( !PackageListGuid ) /*0x1931*/
AssertReport( /*0x1946*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLib.c",
160,
(__int64)"PackageListGuid != ((void *) 0)");
Buffer_1 = Buffer_2; /*0x194b*/
v5 = 0; /*0x1953*/
Buffer = Buffer_2; /*0x1956*/
if ( !Buffer_2 ) /*0x195c*/
return 0; /*0x195c*/
va_copy((va_list)v7, va); /*0x1962*/
do /*0x197b*/
{
++v7; /*0x1975*/
v5 += ReadUnaligned32(Buffer) - 4; /*0x1979*/
Buffer = *v7; /*0x197b*/
}
while ( *v7 ); /*0x197b*/
if ( !v5 ) /*0x1985*/
return 0; /*0x1985*/
AllocationSize = v5 + 24; /*0x198b*/
ZeroPool = (GUID *)AllocateZeroPool(AllocationSize); /*0x1990*/
ZeroPool_1 = ZeroPool; /*0x1995*/
if ( !ZeroPool ) /*0x199b*/
return 0; /*0x1a30*/
CopyGuid(ZeroPool, PackageListGuid); /*0x19a7*/
ZeroPool_1[1].Data1 = AllocationSize; /*0x19ac*/
p_Data2 = &ZeroPool_1[1].Data2; /*0x19af*/
va_copy((va_list)v12, va); /*0x19b3*/
do /*0x19de*/
{
Length = ReadUnaligned32(Buffer_1) - 4; /*0x19d0*/
CopyMem(p_Data2, Buffer_1 + 1, Length); /*0x19d2*/
++v12; /*0x19d7*/
p_Data2 = (unsigned __int16 *)((char *)p_Data2 + Length); /*0x19db*/
Buffer_1 = *v12; /*0x19de*/
}
while ( *v12 ); /*0x19de*/
CopyMem(p_Data2, &SourceBuffer_, 4u); /*0x19f4*/
v14 = (*(__int64 (__fastcall **)(__int64, GUID *, EFI_HANDLE, __int64 *))qword_3948)( /*0x1a0e*/
qword_3948,
ZeroPool_1,
DeviceHandle,
v17);
v15 = v17[0]; /*0x1a10*/
if ( v14 < 0 ) /*0x1a18*/
v15 = 0; /*0x1a18*/
v17[0] = v15; /*0x1a1c*/
AllocateZeroPool_1(ZeroPool_1); /*0x1a24*/
return (EFI_HII_HANDLE)v17[0]; /*0x1a32*/
}
// Function: 0x1E1C - __int64 __
__int64 __fastcall UbaSmbiosFlushStringPack(void *ZeroPool)
{
void (__fastcall **v1)(_QWORD, _QWORD, __int16 *, void *); // rax
__int64 result; // rax
void *ZeroPool_1; // [rsp+30h] [rbp+8h]
__int16 v4; // [rsp+38h] [rbp+10h] BYREF
ZeroPool_1 = ZeroPool; /*0x1e1c*/
v1 = (void (__fastcall **)(_QWORD, _QWORD, __int16 *, void *))qword_3970; /*0x1e25*/
if ( !qword_3970 ) /*0x1e2f*/
{
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3970); /*0x1e48*/
if ( result < 0 ) /*0x1e51*/
return result; /*0x1e51*/
ZeroPool = ZeroPool_1; /*0x1e53*/
v1 = (void (__fastcall **)(_QWORD, _QWORD, __int16 *, void *))qword_3970; /*0x1e58*/
}
v4 = -2; /*0x1e69*/
(*v1)(v1, 0, &v4, ZeroPool); /*0x1e76*/
return 0; /*0x1e7a*/
}
// Function: 0x1FB4 - __int64 __
__int64 __fastcall UbaSmbiosDeleteAllKeysOfType(char n9)
{
__int64 v1; // rax
__int64 v2; // rdi
__int64 v4; // rdx
__int64 v5; // rcx
__int64 v6; // rbx
__int64 v7; // r8
__int64 v8; // rdi
__int64 result; // rax
char n9_1; // [rsp+58h] [rbp+10h] BYREF
__int16 v11; // [rsp+60h] [rbp+18h] BYREF
char v12; // [rsp+68h] [rbp+20h] BYREF
v1 = qword_3968; /*0x1fbc*/
v2 = 0; /*0x1fc3*/
if ( !qword_3968 ) /*0x1fcb*/
{
v6 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3968); /*0x1fea*/
if ( v6 < 0 ) /*0x1ff0*/
goto LABEL_9; /*0x1ff0*/
v1 = qword_3968; /*0x1ff2*/
}
n9_1 = n9; /*0x1ffe*/
v11 = -2; /*0x2003*/
while ( (*(__int64 (__fastcall **)(__int64, __int16 *, char *, char *, _QWORD))(v1 + 24))(v1, &v11, &n9_1, &v12, 0) >= 0 /*0x202d*/
&& v11 != -2 )
{
v1 = qword_3968; /*0x202f*/
++v2; /*0x2036*/
}
v6 = v2; /*0x203b*/
LABEL_9:
v8 = 0; /*0x203e*/
if ( !v6 ) /*0x2043*/
return 0; /*0x205a*/
while ( 1 ) /*0x2045*/
{
LOBYTE(v5) = n9; /*0x2045*/
result = UbaSmbiosSetVariableIfNotExist(v5, v4, v7); /*0x2048*/
if ( result < 0 ) /*0x2050*/
break; /*0x2050*/
if ( ++v8 >= (unsigned __int64)v6 ) /*0x2058*/
return 0; /*0x2058*/
}
return result; /*0x205c*/
}
// Function: 0x2064 - __int64 __
__int64 __fastcall PciWriteMmPciUsra(unsigned __int8 a1, char a2, char a3)
{
_DWORD v4[6]; // [rsp+20h] [rbp-18h] BYREF
v4[3] = 0; /*0x2068*/
v4[1] = 0; /*0x2070*/
v4[2] = 512; /*0x2086*/
v4[0] = (a3 & 7 | (8 * (a2 & 0x1F | (32 * a1)))) << 12; /*0x2097*/
return (*(__int64 (__fastcall **)(_DWORD *))(qword_3980 + 24))(v4); /*0x20a5*/
}
// Function: 0x1044 - __int64 Ge
__int64 GetHiiDatabaseProtocol()
{
__int64 result; // rax
unsigned __int64 n0x10; // rbx
__int64 v2; // rax
__int64 v3; // rcx
result = qword_3918; /*0x104e*/
if ( !qword_3918 ) /*0x105a*/
{
n0x10 = (*(__int64 (__fastcall **)(__int64))(BootServices + 24))(31); /*0x1073*/
(*(void (__fastcall **)(unsigned __int64))(BootServices + 32))(n0x10); /*0x1076*/
if ( n0x10 <= 0x10 ) /*0x107d*/
{
v2 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_31C0, 0, &qword_3918); /*0x109a*/
v3 = qword_3918; /*0x10a0*/
if ( v2 < 0 ) /*0x10aa*/
v3 = 0; /*0x10aa*/
qword_3918 = v3; /*0x10ae*/
return v3; /*0x10b5*/
}
else
{
return 0; /*0x107f*/
}
}
return result; /*0x10bd*/
}
// Function: 0x1F50 - __int64 __
__int64 __fastcall UbaSmbiosSetVariableIfNotExist(__int64 a1, __int64 a2, __int64 a3)
{
char v3; // bl
__int64 result; // rax
__int64 v5; // [rsp+38h] [rbp+10h] BYREF
v5 = a2; /*0x1f50*/
v3 = a1; /*0x1f62*/
if ( qword_3978 /*0x1f86*/
|| (result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3978),
result >= 0) )
{
result = UbaSmbiosGetVariable(v3, a2, a3, &v5); /*0x1f8f*/
if ( result >= 0 ) /*0x1f97*/
return (*(__int64 (__fastcall **)(__int64, _QWORD))(qword_3978 + 16))(qword_3978, (unsigned __int16)v5); /*0x1fa8*/
}
return result; /*0x1fab*/
}
// Function: 0x1A44 - CHAR8 *__c
CHAR8 *__cdecl HiiGetSupportedLanguages(EFI_HII_HANDLE HiiHandle)
{
void *ZeroPool; // rax
void *ZeroPool_1; // rbx
char v5; // [rsp+38h] [rbp+10h] BYREF
UINTN AllocationSize; // [rsp+40h] [rbp+18h] BYREF
if ( !HiiHandle ) /*0x1a54*/
AssertReport( /*0x1a67*/
(__int64)"e:\\hs\\MdeModulePkg\\Library\\UefiHiiLib\\HiiLanguage.c",
47,
(__int64)"HiiHandle != ((void *) 0)");
AllocationSize = 0; /*0x1a78*/
if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, char *, UINTN *))(qword_3928 + 24))( /*0x1a99*/
qword_3928,
HiiHandle,
&v5,
&AllocationSize) != 0x8000000000000005uLL )
return 0; /*0x1a99*/
ZeroPool = AllocateZeroPool(AllocationSize); /*0x1aa4*/
ZeroPool_1 = ZeroPool; /*0x1aa9*/
if ( !ZeroPool ) /*0x1aaf*/
return 0; /*0x1aaf*/
if ( (*(__int64 (__fastcall **)(__int64, EFI_HII_HANDLE, void *, UINTN *))(qword_3928 + 24))( /*0x1acc*/
qword_3928,
HiiHandle,
ZeroPool,
&AllocationSize) < 0 )
{
AllocateZeroPool_1(ZeroPool_1); /*0x1ad1*/
return 0; /*0x1a9d*/
}
return (CHAR8 *)ZeroPool_1; /*0x1ae0*/
}
// Function: 0x14AC - __int64 __
__int64 __fastcall GetPlatformLangVariable(__int64 a1, __int64 *p_HiiHandle, unsigned __int64 n24)
{
__int64 RuntimeServices; // rax
UINTN AllocationSize; // rcx
__int64 v6; // rdi
void *Pool; // rax
unsigned __int64 n24_1; // [rsp+50h] [rbp+18h] BYREF
n24_1 = n24; /*0x14b1*/
if ( !p_HiiHandle ) /*0x14c1*/
AssertReport( /*0x14d6*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c",
1401,
(__int64)"Name != ((void *) 0) && Guid != ((void *) 0) && Value != ((void *) 0)");
RuntimeServices = RuntimeServices; /*0x14db*/
n24_1 = 0; /*0x14e7*/
*p_HiiHandle = 0; /*0x14f4*/
v6 = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x150b*/
L"PlatformLang",
&unk_31B0,
0,
&n24_1,
0);
if ( v6 == 0x8000000000000005uLL ) /*0x151b*/
{
Pool = AllocatePool(AllocationSize); /*0x1522*/
*p_HiiHandle = (__int64)Pool; /*0x1527*/
if ( !Pool ) /*0x152d*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 1421, (__int64)"*Value != ((void *) 0)"); /*0x1542*/
if ( *p_HiiHandle ) /*0x1547*/
{
v6 = (*(__int64 (__fastcall **)(const __int16 *, void *, _QWORD, unsigned __int64 *, _QWORD))(RuntimeServices + 72))( /*0x1580*/
L"PlatformLang",
&unk_31B0,
0,
&n24_1,
*p_HiiHandle);
if ( v6 < 0 ) /*0x1586*/
{
AllocateZeroPool_1((void *)*p_HiiHandle); /*0x158b*/
*p_HiiHandle = 0; /*0x1590*/
}
}
else
{
return 0x8000000000000009uLL; /*0x154f*/
}
}
return v6; /*0x159c*/
}
// Function: 0x15A4 - CHAR8 *Get
CHAR8 *GetBestLanguage(const CHAR8 *SupportedLanguages, BOOLEAN Iso639Language, ...)
{
const CHAR8 *v4; // rsi
const CHAR8 **v5; // r15
UINTN n3; // rbp
UINTN n3_1; // rbx
CHAR8 n59_1; // al
const CHAR8 *SupportedLanguages_1; // rdi
CHAR8 n59; // al
void *ZeroPool; // rax
const CHAR8 *v13; // [rsp+70h] [rbp+18h] BYREF
va_list va1; // [rsp+78h] [rbp+20h] BYREF
va_list va; // [rsp+70h] [rbp+18h]
va_start(va1, Iso639Language);
va_start(va, Iso639Language);
v13 = va_arg(va1, const CHAR8 *); /*0x15a4*/
if ( !SupportedLanguages ) /*0x15c9*/
AssertReport( /*0x15de*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c",
1528,
(__int64)"SupportedLanguages != ((void *) 0)");
v4 = v13; /*0x15e3*/
if ( v13 ) /*0x15eb*/
{
va_copy((va_list)v5, va); /*0x15f1*/
do /*0x16aa*/
{
n3 = 3; /*0x15f9*/
if ( AsciiStrLen(v4) <= 3 ) /*0x1606*/
n3_1 = AsciiStrLen(v4); /*0x1614*/
else
n3_1 = 3; /*0x1608*/
if ( Iso639Language ) /*0x161a*/
{
LABEL_29:
while ( n3_1 ) /*0x16a4*/
{
SupportedLanguages_1 = SupportedLanguages; /*0x163d*/
if ( *SupportedLanguages ) /*0x1638*/
{
while ( 1 ) /*0x1645*/
{
if ( Iso639Language ) /*0x1645*/
goto LABEL_36; /*0x1645*/
while ( *SupportedLanguages_1 == 59 ) /*0x1654*/
++SupportedLanguages_1; /*0x164d*/
n59 = *SupportedLanguages_1; /*0x1656*/
n3 = 0; /*0x1658*/
while ( n59 && n59 != 59 ) /*0x165e*/
n59 = SupportedLanguages_1[++n3]; /*0x1663*/
if ( n3_1 <= n3 ) /*0x166d*/
{
LABEL_36:
if ( !sub_21B4(SupportedLanguages_1, v4, n3_1) ) /*0x1678*/
break; /*0x1678*/
}
SupportedLanguages_1 += n3; /*0x1682*/
if ( !*SupportedLanguages_1 ) /*0x1685*/
goto LABEL_25; /*0x1688*/
}
ZeroPool = AllocateZeroPool(n3 + 1); /*0x16cb*/
if ( ZeroPool ) /*0x16d3*/
return (CHAR8 *)CopyMem(ZeroPool, SupportedLanguages_1, n3); /*0x16de*/
return 0; /*0x16d3*/
}
LABEL_25:
if ( Iso639Language ) /*0x168d*/
break; /*0x168d*/
if ( !--n3_1 ) /*0x1693*/
break; /*0x1693*/
do /*0x169f*/
{
if ( v4[n3_1] == 45 ) /*0x1699*/
break; /*0x1699*/
--n3_1; /*0x169b*/
}
while ( n3_1 ); /*0x169f*/
}
}
else
{
n59_1 = *v4; /*0x1620*/
n3_1 = 0; /*0x1622*/
if ( *v4 ) /*0x1620*/
{
do /*0x1634*/
{
if ( n59_1 == 59 ) /*0x162a*/
break; /*0x162a*/
n59_1 = v4[++n3_1]; /*0x162f*/
}
while ( n59_1 ); /*0x1634*/
goto LABEL_29; /*0x1634*/
}
}
v4 = *++v5; /*0x16aa*/
}
while ( *v5 ); /*0x16aa*/
}
return 0; /*0x16b8*/
}
// Function: 0x16E8 - void *__cd
void *__cdecl GetHobList()
{
void *Table_; // rax
signed __int64 SystemConfigurationTable; // rax
Table_ = (void *)Table_; /*0x16ec*/
if ( !Table_ ) /*0x16f6*/
{
SystemConfigurationTable = EfiGetSystemConfigurationTable(&TableGuid_, (void **)&Table_); /*0x1706*/
if ( SystemConfigurationTable < 0 ) /*0x170e*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", SystemConfigurationTable); /*0x171f*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 54, (__int64)"!EFI_ERROR (Status)"); /*0x1737*/
}
Table_ = (void *)Table_; /*0x173c*/
if ( !Table_ ) /*0x1746*/
{
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\DxeHobLib\\HobLib.c", 55, (__int64)"mHobList != ((void *) 0)"); /*0x1759*/
return (void *)Table_; /*0x175e*/
}
}
return Table_; /*0x1765*/
}
// Function: 0x13E8 - EFI_STATUS
EFI_STATUS __cdecl EfiGetSystemConfigurationTable(EFI_GUID *TableGuid, void **Table)
{
__int64 SystemTable; // rdi
__int64 v5; // rbx
__int64 i; // r14
if ( !TableGuid ) /*0x140a*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 97, (__int64)"TableGuid != ((void *) 0)"); /*0x141d*/
if ( !Table ) /*0x1425*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\UefiLib\\UefiLib.c", 98, (__int64)"Table != ((void *) 0)"); /*0x1438*/
SystemTable = SystemTable; /*0x143d*/
v5 = 0; /*0x1444*/
*Table = 0; /*0x1446*/
if ( !*(_QWORD *)(SystemTable + 104) ) /*0x144a*/
return 0x800000000000000EuLL; /*0x1473*/
for ( i = 0; !CompareGuid(TableGuid, (const GUID *)(i + *(_QWORD *)(SystemTable + 112))); i += 24 ) /*0x1450*/
{
if ( (unsigned __int64)++v5 >= *(_QWORD *)(SystemTable + 104) ) /*0x1471*/
return 0x800000000000000EuLL; /*0x1471*/
}
*Table = *(void **)(*(_QWORD *)(SystemTable + 112) + 24 * v5 + 16); /*0x14a7*/
return 0; /*0x1491*/
}
// Function: 0x1DC8 - unsigned _
unsigned __int64 __fastcall UbaSmbiosFindStringBlockEnd(__int64 *p_ZeroPool, _QWORD *p_Length)
{
__int64 ZeroPool; // rax
__int64 v3; // rcx
_BYTE *v4; // r8
unsigned __int64 i; // rax
ZeroPool = *p_ZeroPool; /*0x1dc8*/
v3 = *(unsigned __int8 *)(*p_ZeroPool + 1); /*0x1dcb*/
*p_Length = v3; /*0x1dcf*/
v4 = (_BYTE *)(v3 + ZeroPool); /*0x1dd2*/
while ( 1 ) /*0x1dd8*/
{
if ( !*v4 ) /*0x1dd8*/
{
if ( !*++v4 ) /*0x1de3*/
{
*p_Length += 2LL; /*0x1e08*/
return 0; /*0x1e0e*/
}
++*p_Length; /*0x1de5*/
}
for ( i = 0; i < 0x40; ++i ) /*0x1de8*/
{
if ( !v4[i] ) /*0x1deb*/
break; /*0x1def*/
}
if ( i == 64 ) /*0x1dfe*/
break; /*0x1dfe*/
v4 += i; /*0x1e00*/
*p_Length += i; /*0x1e03*/
}
return 0x8000000000000002uLL; /*0x1e0e*/
}
// Function: 0x1E80 - __int64 __
__int64 __fastcall UbaSmbiosGetVariable(char a1, __int64 a2, __int64 a3, _WORD *a4)
{
__int64 v4; // rbx
__int64 result; // rax
__int64 v8; // rax
_BYTE v9[40]; // [rsp+30h] [rbp-28h] BYREF
__int64 v10; // [rsp+68h] [rbp+10h] BYREF
__int64 v11; // [rsp+70h] [rbp+18h] BYREF
v11 = a3; /*0x1e85*/
v10 = a2; /*0x1e8a*/
v4 = 0; /*0x1e96*/
if ( !a4 ) /*0x1ea1*/
return 0x8000000000000002uLL; /*0x1ead*/
v8 = qword_3958; /*0x1eb2*/
if ( !qword_3958 ) /*0x1ebc*/
{
result = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(BootServices + 320))(&unk_3850, 0, &qword_3958); /*0x1ed5*/
if ( result < 0 ) /*0x1ede*/
return result; /*0x1ede*/
v8 = qword_3958; /*0x1ee0*/
}
LOBYTE(v11) = a1; /*0x1eec*/
LOWORD(v10) = -2; /*0x1ef1*/
while ( (*(__int64 (__fastcall **)(__int64, __int64 *, __int64 *, _BYTE *, _QWORD))(v8 + 24))(v8, &v10, &v11, v9, 0) >= 0 /*0x1f1e*/
&& (_WORD)v10 != 0xFFFE )
{
if ( ++v4 == 1 ) /*0x1f27*/
{
*a4 = v10; /*0x1f32*/
return 0; /*0x1f37*/
}
v8 = qword_3958; /*0x1f29*/
}
return 0x800000000000000EuLL; /*0x1f48*/
}
// Function: 0x280 - InternalZeroMem
char *__fastcall InternalZeroMem(char *buf, unsigned __int64 n24)
{
memset(buf, 0, 8 * (n24 >> 3)); /*0x296*/
memset(&buf[8 * (n24 >> 3)], 0, n24 & 7); /*0x29b*/
return buf; /*0x29e*/
}
// Function: 0x300 - InternalCopyMem
char *__fastcall InternalCopyMem(char *dst, char *src, unsigned __int64 count)
{
char *dst_1; // rax
unsigned __int64 count_1; // rcx
char *dst_2; // rdi
char *src_1; // rsi
dst_1 = dst; /*0x310*/
if ( src < dst && &src[count - 1] >= dst ) /*0x318*/
{
src_1 = &src[count - 1]; /*0x330*/
dst_2 = &dst[count - 1]; /*0x333*/
}
else
{
count_1 = count; /*0x31a*/
count &= 7u; /*0x31d*/
count_1 >>= 3; /*0x324*/
qmemcpy(dst, src, 8 * count_1); /*0x328*/
src_1 = &src[8 * count_1]; /*0x328*/
dst_2 = &dst[8 * count_1]; /*0x328*/
}
qmemcpy(dst_2, src_1, count); /*0x33c*/
return dst_1; /*0x33f*/
}
// Function: 0x123C - ZeroMem
void *__cdecl ZeroMem(void *Buffer, UINTN Length)
{
if ( !Length ) /*0x124f*/
return Buffer; /*0x1251*/
if ( !Buffer ) /*0x1259*/
AssertReport( /*0x126c*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c",
53,
(__int64)"Buffer != ((void *) 0)");
if ( Length > -(__int64)Buffer ) /*0x127a*/
AssertReport( /*0x128f*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c",
54,
(__int64)"Length <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)Buffer + 1)");
return InternalZeroMem((char *)Buffer, Length); /*0x12a4*/
}
// Function: 0x12AC - ReadUnaligned32
UINT32 __cdecl ReadUnaligned32(const UINT32 *Buffer)
{
if ( !Buffer ) /*0x12b8*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 141, (__int64)"Buffer != ((void *) 0)"); /*0x12cd*/
return *Buffer; /*0x12d4*/
}
// Function: 0x12DC - ReadUnaligned64
UINT64 __cdecl ReadUnaligned64(const UINT64 *Buffer)
{
if ( !Buffer ) /*0x12e8*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 192, (__int64)"Buffer != ((void *) 0)"); /*0x12fd*/
return *Buffer; /*0x1305*/
}
// Function: 0x130C - WriteUnaligned64
UINT64 __cdecl WriteUnaligned64(UINT64 *Buffer, UINT64 Value)
{
if ( !Buffer ) /*0x131f*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 219, (__int64)"Buffer != ((void *) 0)"); /*0x1334*/
*Buffer = Value; /*0x1339*/
return Value; /*0x1344*/
}
// Function: 0x134C - AllocatePool
void *__cdecl AllocatePool(UINTN AllocationSize)
{
__int64 v1; // rdx
__int64 v2; // rax
void *v3; // rcx
void *v5; // [rsp+40h] [rbp+18h] BYREF
v2 = (*(__int64 (__fastcall **)(__int64, __int64, void **))(BootServices + 64))(4, v1, &v5); /*0x1361*/
v3 = v5; /*0x1364*/
if ( v2 < 0 ) /*0x136e*/
return 0; /*0x136e*/
return v3; /*0x1375*/
}
// Function: 0x137C - AllocateZeroPool
void *__cdecl AllocateZeroPool(UINTN AllocationSize)
{
void *Buffer; // rax
Buffer = AllocatePool(AllocationSize); /*0x1388*/
if ( Buffer ) /*0x1390*/
return ZeroMem(Buffer, AllocationSize); /*0x1398*/
return Buffer; /*0x139d*/
}
// Function: 0x13A4 - AllocateZeroPool_1
void __cdecl AllocateZeroPool_1(void *Buffer)
{
__int64 v1; // rax
v1 = (*(__int64 (__fastcall **)(void *))(BootServices + 72))(Buffer); /*0x13af*/
if ( v1 < 0 ) /*0x13b5*/
{
DebugPrintAssertLog(0x80000000LL, "\nASSERT_EFI_ERROR (Status = %r)\n", v1); /*0x13c6*/
AssertReport( /*0x13de*/
(__int64)"e:\\hs\\MdePkg\\Library\\UefiMemoryAllocationLib\\MemoryAllocationLib.c",
819,
(__int64)"!EFI_ERROR (Status)");
}
}
// Function: 0x118C - CopyGuid
GUID *__cdecl CopyGuid(GUID *DestinationGuid, const GUID *SourceGuid)
{
UINT64 Unaligned64; // rax
UINT64 Value; // rax
Unaligned64 = ReadUnaligned64((const UINT64 *)&SourceGuid->Data1); /*0x119f*/
WriteUnaligned64((UINT64 *)&DestinationGuid->Data1, Unaligned64); /*0x11aa*/
Value = ReadUnaligned64((const UINT64 *)SourceGuid->Data4); /*0x11b3*/
WriteUnaligned64((UINT64 *)DestinationGuid->Data4, Value); /*0x11bf*/
return DestinationGuid; /*0x11cc*/
}
// Function: 0x11D4 - CompareGuid
BOOLEAN __cdecl CompareGuid(const GUID *Guid1, const GUID *Guid2)
{
__int128 v4; // rdi
UINT64 Unaligned64; // rbx
*((_QWORD *)&v4 + 1) = ReadUnaligned64((const UINT64 *)&Guid1->Data1); /*0x11f6*/
Unaligned64 = ReadUnaligned64((const UINT64 *)&Guid2->Data1); /*0x1202*/
*(_QWORD *)&v4 = ReadUnaligned64((const UINT64 *)Guid1->Data4); /*0x120e*/
return v4 == __PAIR128__(Unaligned64, ReadUnaligned64((const UINT64 *)Guid2->Data4)); /*0x1235*/
}
// Function: 0x2134 - CopyMem
void *__cdecl CopyMem(void *DestinationBuffer, const void *SourceBuffer, UINTN Length)
{
void *DestinationBuffer_1; // rax
unsigned __int64 v7; // rbp
DestinationBuffer_1 = DestinationBuffer; /*0x20c9*/
if ( Length ) /*0x20cf*/
{
v7 = Length - 1; /*0x20d1*/
if ( Length - 1 > ~(unsigned __int64)DestinationBuffer ) /*0x20db*/
AssertReport( /*0x20f0*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
56,
(__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
if ( v7 > ~(unsigned __int64)SourceBuffer ) /*0x20fe*/
AssertReport( /*0x2113*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
57,
(__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
if ( DestinationBuffer == SourceBuffer ) /*0x211b*/
return DestinationBuffer; /*0x211d*/
else
return InternalCopyMem((char *)DestinationBuffer, (char *)SourceBuffer, Length); /*0x212b*/
}
return DestinationBuffer_1; /*0x213f*/
}
// Function: 0x2148 - AsciiStrLen
UINTN __cdecl AsciiStrLen(const CHAR8 *String)
{
const CHAR8 *v1; // rbx
UINTN i; // rdi
v1 = String; /*0x2152*/
if ( !String ) /*0x2158*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\String.c", 1082, (__int64)"String != ((void *) 0)"); /*0x216d*/
for ( i = 0; *v1; ++i ) /*0x2174*/
{
if ( i >= 0xF4240 ) /*0x2180*/
AssertReport( /*0x2195*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\String.c",
1090,
(__int64)"Length < _gPcd_FixedAtBuild_PcdMaximumAsciiStringLength");
++v1; /*0x219a*/
}
return i; /*0x21ad*/
}
// Function: 0x20AC - CopyMem
void *__cdecl CopyMem(void *DestinationBuffer, const void *SourceBuffer, UINTN Length)
{
void *DestinationBuffer_1; // rax
unsigned __int64 v7; // rbp
DestinationBuffer_1 = DestinationBuffer; /*0x20c9*/
if ( Length ) /*0x20cf*/
{
v7 = Length - 1; /*0x20d1*/
if ( Length - 1 > ~(unsigned __int64)DestinationBuffer ) /*0x20db*/
AssertReport( /*0x20f0*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
56,
(__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)DestinationBuffer)");
if ( v7 > ~(unsigned __int64)SourceBuffer ) /*0x20fe*/
AssertReport( /*0x2113*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c",
57,
(__int64)"(Length - 1) <= (0xFFFFFFFFFFFFFFFFULL - (UINTN)SourceBuffer)");
if ( DestinationBuffer == SourceBuffer ) /*0x211b*/
return DestinationBuffer; /*0x211d*/
else
return InternalCopyMem((char *)DestinationBuffer, (char *)SourceBuffer, Length); /*0x212b*/
}
return DestinationBuffer_1; /*0x213f*/
}
// Function: 0x2280 - StrLen
UINTN __cdecl StrLen(const CHAR16 *Buffer)
{
UINTN v1; // rdx
UINTN v2; // rdi
UINTN result; // rax
v2 = v1; /*0x228a*/
if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x2293*/
AssertReport( /*0x22a8*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
128,
(__int64)"((UINTN) String & 0x00000001) == 0");
if ( !Buffer || !v2 ) /*0x22b7*/
return 0; /*0x22d9*/
result = 0; /*0x22b9*/
if ( *Buffer ) /*0x22bb*/
{
while ( result < v2 - 1 ) /*0x22c7*/
{
if ( !Buffer[++result] ) /*0x22cc*/
return result; /*0x22d0*/
}
return v2; /*0x22d4*/
}
return result; /*0x22e0*/
}
// Function: 0x22E8 - AsciiStrnLenS
UINTN __cdecl AsciiStrnLenS(const CHAR8 *SourceBuffer, UINTN MaxSize)
{
UINTN result; // rax
if ( !SourceBuffer || !MaxSize ) /*0x22f0*/
return 0; /*0x230f*/
result = 0; /*0x22f2*/
if ( *SourceBuffer ) /*0x22f4*/
{
while ( result < MaxSize - 1 ) /*0x22ff*/
{
if ( !SourceBuffer[++result] ) /*0x2304*/
return result; /*0x2308*/
}
return MaxSize; /*0x230b*/
}
return result; /*0x230a*/
}
// Function: 0x2314 - StrToAsciiStr
unsigned __int64 __fastcall StrToAsciiStr(const CHAR16 *Buffer, CHAR16 *SourceBuffer, UINTN n0xF4240)
{
const CHAR16 *Buffer_1; // rbx
const char *(Destination____((void__)_0)); // r8
__int64 n2682; // rdx
UINTN n0xF4240_1; // rax
UINTN n0xF4240_2; // rbp
Buffer_1 = Buffer; /*0x2339*/
if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x233f*/
AssertReport( /*0x2350*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
2677,
(__int64)"((UINTN) Source & 0x00000001) == 0");
if ( !SourceBuffer ) /*0x235b*/
{
(Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x235d*/
n2682 = 2682; /*0x2364*/
LABEL_5:
AssertReport( /*0x2369*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
n2682,
(__int64)(Destination____((void__)_0)));
return 0x8000000000000002uLL; /*0x237b*/
}
if ( !Buffer_1 ) /*0x2383*/
{
(Destination____((void__)_0)) = "(Source != ((void *) 0))"; /*0x2385*/
n2682 = 2683; /*0x238c*/
goto LABEL_5; /*0x2391*/
}
if ( n0xF4240 > 0xF4240 ) /*0x239a*/
{
(Destination____((void__)_0)) = "(DestMax <= (_gPcd_FixedAtBuild_PcdMaximumAsciiStringLength))"; /*0x239c*/
n2682 = 2689; /*0x23a3*/
goto LABEL_5; /*0x23a8*/
}
if ( !n0xF4240 ) /*0x23ad*/
{
(Destination____((void__)_0)) = "(DestMax != 0)"; /*0x23af*/
n2682 = 2698; /*0x23b6*/
goto LABEL_5; /*0x23bb*/
}
n0xF4240_1 = StrLen(Buffer_1); /*0x23c3*/
n0xF4240_2 = n0xF4240_1; /*0x23c8*/
if ( n0xF4240 <= n0xF4240_1 ) /*0x23ce*/
{
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 2704, (__int64)"(DestMax > SourceLen)"); /*0x23df*/
return 0x8000000000000005uLL; /*0x23ee*/
}
if ( Buffer_1 > SourceBuffer ) /*0x23f6*/
goto LABEL_17; /*0x23f6*/
if ( SourceBuffer >= &Buffer_1[n0xF4240_1 + 1] ) /*0x2403*/
{
if ( SourceBuffer > Buffer_1 ) /*0x2408*/
goto LABEL_20; /*0x2408*/
LABEL_17:
if ( Buffer_1 >= (CHAR16 *)((char *)SourceBuffer + n0xF4240) ) /*0x2411*/
goto LABEL_19; /*0x2411*/
}
AssertReport( /*0x2413*/
(__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
2709,
(__int64)"!InternalSafeStringIsOverlap (Destination, DestMax, (void *)Source, (SourceLen + 1) * sizeof(CHAR16))");
LABEL_19:
if ( Buffer_1 > SourceBuffer ) /*0x242a*/
{
LABEL_22:
if ( Buffer_1 < (CHAR16 *)((char *)SourceBuffer + n0xF4240) ) /*0x2445*/
return 0x800000000000000FuLL; /*0x2445*/
goto LABEL_27; /*0x2445*/
}
LABEL_20:
if ( SourceBuffer < &Buffer_1[n0xF4240_2 + 1] ) /*0x2437*/
return 0x800000000000000FuLL; /*0x2451*/
if ( Buffer_1 >= SourceBuffer ) /*0x243c*/
goto LABEL_22; /*0x243c*/
LABEL_27:
while ( *Buffer_1 ) /*0x2482*/
{
if ( *Buffer_1 >= 0x100u ) /*0x245b*/
AssertReport((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 2719, (__int64)"*Source < 0x100"); /*0x246c*/
*(_BYTE *)SourceBuffer = *(_BYTE *)Buffer_1; /*0x2473*/
SourceBuffer = (CHAR16 *)((char *)SourceBuffer + 1); /*0x2475*/
++Buffer_1; /*0x2478*/
}
*(_BYTE *)SourceBuffer = 0; /*0x2484*/
return 0; /*0x2498*/
}