=== DECOMPILE 0xffe2f356 ===
{"addr":"0xffe2f356","code":"int __thiscall sub_FFE2F356(void *this)\n{\n int v1; // eax\n int v2; // eax\n int v3; // eax\n int v5; // [esp+0h] [ebp-4h]\n\n v1 = sub_FFE2F553(this); /*0xffe2f35a*/\n v2 = (*(int (__stdcall **)(int))(*(_DWORD *)v1 + 32))(v1); /*0xffe2f36f*/\n if ( v2 < 0 ) /*0xffe2f377*/\n {\n sub_FFE2F43E(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffe2f384*/\n v3 = sub_FFE2F40D(); /*0xffe2f38c*/\n if ( v3 ) /*0xffe2f393*/\n (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffe2f3a1*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiPcdLib\\\\PeiPcdLib.c\",\n 49,\n \"!EFI_ERROR (Status)\");\n }\n return v5; /*0xffe2f3ac*/\n}","refs":[{"addr":"0xffe2f553","name":"sub_FFE2F553"},{"addr":"0xffe2f43e","name":"sub_FFE2F43E"},{"addr":"0xffe2f5fc","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe2f40d","name":"sub_FFE2F40D"},{"addr":"0xffe2f634","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c"},{"addr":"0xffe2f620","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"}]}
=== DECOMPILE 0xffe2f40d ===
{"addr":"0xffe2f40d","code":"int sub_FFE2F40D()\n{\n int v0; // eax\n void *v2; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFE2F553(v2); /*0xffe2f412*/\n if ( (*(int (__cdecl **)(int, void *, _DWORD, void **, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFE2F8BC, 0, &v2, &v3) >= 0 ) /*0xffe2f431*/\n return v3; /*0xffe2f437*/\n else\n return 0; /*0xffe2f433*/\n}","refs":[{"addr":"0xffe2f553","name":"sub_FFE2F553"},{"addr":"0xffe2f8bc","name":"unk_FFE2F8BC"}]}
=== DECOMPILE 0xffe2f4cd ===
{"addr":"0xffe2f4cd","code":"__int64 __thiscall sub_FFE2F4CD(void *this)\n{\n int v2; // eax\n\n if ( !this ) /*0xffe2f4d2*/\n {\n v2 = sub_FFE2F40D(); /*0xffe2f4d4*/\n if ( v2 ) /*0xffe2f4db*/\n (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffe2f4ec*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 192,\n \"Buffer != ((void *) 0)\");\n }\n return *(_QWORD *)this; /*0xffe2f4f7*/\n}","refs":[{"addr":"0xffe2f40d","name":"sub_FFE2F40D"},{"addr":"0xffe2f678","name":"aEHsMdepkgLibra_0","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c"},{"addr":"0xffe2f660","name":"aBufferVoid0","string":"Buffer != ((void *) 0)"}]}
=== DECOMPILE 0xffe2f03c ===
{"addr":"0xffe2f03c","code":"char *__cdecl sub_FFE2F03C(char *dst, char *src, unsigned int count_1)\n{\n unsigned int count; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count = count_1; /*0xffe2f046*/\n if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffe2f054*/\n {\n src_1 = &src[count_1 - 1]; /*0xffe2f068*/\n dst_1 = &dst[count_1 - 1]; /*0xffe2f06a*/\n }\n else\n {\n count = count_1 & 3; /*0xffe2f058*/\n qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffe2f061*/\n src_1 = &src[4 * (count_1 >> 2)]; /*0xffe2f061*/\n dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffe2f061*/\n }\n qmemcpy(dst_1, src_1, count); /*0xffe2f071*/\n return dst; /*0xffe2f078*/\n}"}
=== DECOMPILE 0xffe2f0f6 ===
{"addr":"0xffe2f0f6","code":"int __fastcall sub_FFE2F0F6(int a1, unsigned int *a2, int *a3)\n{\n unsigned int v5; // ecx\n bool v6; // zf\n unsigned int v7; // ebx\n int v8; // eax\n unsigned int v9; // ebx\n int n0x14_2; // edi\n unsigned __int64 v12; // rax\n int v13; // edi\n int v14; // esi\n __int64 v15; // rax\n int v16; // eax\n unsigned int v17; // edi\n unsigned int v18; // ebx\n int v19; // edx\n int n2048; // esi\n unsigned int n0x14; // eax\n int v22; // edi\n char v23; // dl\n unsigned int v24; // esi\n int *v25; // eax\n unsigned __int8 v26; // [esp+13h] [ebp-1Dh]\n int v27; // [esp+14h] [ebp-1Ch] BYREF\n unsigned int v28; // [esp+18h] [ebp-18h]\n unsigned int n0x14_1; // [esp+1Ch] [ebp-14h]\n _DWORD v30[4]; // [esp+20h] [ebp-10h] BYREF\n\n v30[0] = 386434418; /*0xffe2f0fe*/\n v30[1] = 1156527999; /*0xffe2f109*/\n v30[2] = -1615835505; /*0xffe2f111*/\n v30[3] = 1889552127; /*0xffe2f11c*/\n v5 = *(_DWORD *)(a1 + 32) + a1 - 1; /*0xffe2f124*/\n v6 = *(_DWORD *)(a1 + 40) == 1213613663; /*0xffe2f127*/\n v28 = v5; /*0xffe2f12e*/\n if ( !v6 ) /*0xffe2f132*/\n return -2147483634; /*0xffe2f132*/\n v7 = a1 + *(unsigned __int16 *)(a1 + 48); /*0xffe2f138*/\n if ( v5 <= v7 ) /*0xffe2f13c*/\n return -2147483634; /*0xffe2f13c*/\n v8 = *(unsigned __int16 *)(a1 + 52); /*0xffe2f13e*/\n if ( (_WORD)v8 ) /*0xffe2f145*/\n v7 = a1 + v8 + *(_DWORD *)(a1 + v8 + 16); /*0xffe2f14c*/\n v9 = (v7 + 7) & 0xFFFFFFF8; /*0xffe2f151*/\n if ( v9 >= v5 ) /*0xffe2f156*/\n return -2147483634; /*0xffe2f156*/\n while ( 1 ) /*0xffe2f15f*/\n {\n n0x14_2 = *(_DWORD *)(v9 + 20) & 0xFFFFFF; /*0xffe2f15f*/\n n0x14_1 = n0x14_2; /*0xffe2f167*/\n if ( (unsigned __int8)sub_FFE2F3AE(v9, v30) ) /*0xffe2f16b*/\n break; /*0xffe2f16b*/\n if ( n0x14_2 + v9 > v9 ) /*0xffe2f179*/\n {\n v9 = (n0x14_2 + v9 + 7) & 0xFFFFFFF8; /*0xffe2f17e*/\n if ( v9 < v28 ) /*0xffe2f185*/\n continue; /*0xffe2f185*/\n }\n return -2147483634; /*0xffe2f185*/\n }\n if ( a1 != -15663104 ) /*0xffe2f19a*/\n {\n *a2 = v9 + 24; /*0xffe2f2ae*/\n v25 = a3; /*0xffe2f2b1*/\n *a3 = n0x14_2; /*0xffe2f2b5*/\n goto LABEL_30; /*0xffe2f2b5*/\n }\n v12 = __readmsr(0x17u); /*0xffe2f1a5*/\n v13 = HIDWORD(v12); /*0xffe2f1a9*/\n v14 = v12; /*0xffe2f1ab*/\n v15 = sub_FFE2F4F9(23, 23); /*0xffe2f1ad*/\n v16 = sub_FFE2F52C(v14 & ~(_DWORD)v15, v13 & ~HIDWORD(v15)); /*0xffe2f1bc*/\n v17 = v9 + n0x14_1; /*0xffe2f1ce*/\n v26 = 1 << v16; /*0xffe2f1d0*/\n v28 = v9 + n0x14_1; /*0xffe2f1d8*/\n sub_FFE2F486(v16, &v27); /*0xffe2f1dc*/\n v18 = v9 + 24; /*0xffe2f1e1*/\n if ( *(_DWORD *)v18 != 1 ) /*0xffe2f1ea*/\n return -2147483634; /*0xffe2f193*/\n while ( 1 ) /*0xffe2f1ee*/\n {\n v19 = *(_DWORD *)(v18 + 28); /*0xffe2f1ee*/\n if ( v19 ) /*0xffe2f1f3*/\n n2048 = *(_DWORD *)(v18 + 32); /*0xffe2f1f5*/\n else\n n2048 = 2048; /*0xffe2f1fa*/\n if ( *(_DWORD *)(v18 + 12) == v27 && (v26 & *(_BYTE *)(v18 + 24)) != 0 ) /*0xffe2f20f*/\n {\n *a2 = v18; /*0xffe2f28c*/\n a2[1] = 0; /*0xffe2f28f*/\n *a3 = n2048; /*0xffe2f292*/\n a3[1] = 0; /*0xffe2f294*/\n return 0; /*0xffe2f299*/\n }\n if ( *(_DWORD *)(v18 + 32) > (unsigned int)(v19 + 48) ) /*0xffe2f217*/\n break; /*0xffe2f217*/\nLABEL_24:\n v24 = (n2048 + 15) & 0xFFFFFFF0; /*0xffe2f258*/\n if ( v18 + (unsigned __int64)v24 < v17 ) /*0xffe2f272*/\n {\n v18 += v24; /*0xffe2f278*/\n if ( *(_DWORD *)v18 == 1 ) /*0xffe2f27d*/\n continue; /*0xffe2f27d*/\n }\n return -2147483634; /*0xffe2f27d*/\n }\n n0x14 = *(_DWORD *)(v19 + v18 + 48); /*0xffe2f219*/\n v22 = v19 + v18 + 68; /*0xffe2f220*/\n n0x14_1 = n0x14; /*0xffe2f222*/\n if ( n0x14 >= 0x14 ) /*0xffe2f229*/\n return -2147483634; /*0xffe2f229*/\n v23 = 0; /*0xffe2f22f*/\n if ( !n0x14 ) /*0xffe2f233*/\n {\nLABEL_23:\n v17 = v28; /*0xffe2f254*/\n goto LABEL_24; /*0xffe2f254*/\n }\n while ( *(_DWORD *)v22 != v27 || (v26 & *(_BYTE *)(v22 + 4)) == 0 ) /*0xffe2f244*/\n {\n v22 += 12; /*0xffe2f246*/\n if ( (unsigned __int8)++v23 >= n0x14_1 ) /*0xffe2f252*/\n goto LABEL_23; /*0xffe2f252*/\n }\n v25 = a3; /*0xffe2f29e*/\n *a2 = v18; /*0xffe2f2a2*/\n *a3 = n2048; /*0xffe2f2a5*/\nLABEL_30:\n v25[1] = 0; /*0xffe2f2b7*/\n a2[1] = 0; /*0xffe2f2bc*/\n return 0; /*0xffe2f18c*/\n}","refs":[{"addr":"0xffe2f3ae","name":"sub_FFE2F3AE"},{"addr":"0xffe2f4f9","name":"sub_FFE2F4F9"},{"addr":"0xffe2f52c","name":"sub_FFE2F52C"},{"addr":"0xffe2f486","name":"sub_FFE2F486"}]}
=== DECOMPILE 0xffe2f468 ===
{"addr":"0xffe2f468","code":"int __fastcall sub_FFE2F468(int a1, int a2, int a3)\n{\n int result; // eax\n\n result = sub_FFE2F40D(); /*0xffe2f46e*/\n if ( result ) /*0xffe2f475*/\n return (*(int (__cdecl **)(int, int, int))(result + 4))(a1, a2, a3); /*0xffe2f47d*/\n return result; /*0xffe2f483*/\n}","refs":[{"addr":"0xffe2f40d","name":"sub_FFE2F40D"}]}
=== DECOMPILE 0xffe2f553 ===
{"addr":"0xffe2f553","code":"int __cdecl sub_FFE2F553()\n{\n int v0; // esi\n _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF\n int v3; // [esp+6h] [ebp-6h]\n\n sub_FFE2F5D4(v2); /*0xffe2f55c*/\n v0 = *(_DWORD *)(v3 - 4); /*0xffe2f564*/\n if ( !v0 ) /*0xffe2f569*/\n sub_FFE2F468( /*0xffe2f578*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return v0; /*0xffe2f580*/\n}","refs":[{"addr":"0xffe2f5d4","name":"sub_FFE2F5D4"},{"addr":"0xffe2f468","name":"sub_FFE2F468"},{"addr":"0xffe2f6c4","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe2f6a4","name":"aPeiservicesVoi","string":"PeiServices != ((void *) 0)"}]}
=== DECOMPILE 0xffe2f2c4 ===
{"addr":"0xffe2f2c4","code":"int __thiscall ModuleEntryPoint_0(void *this)\n{\n int v1; // eax\n int v2; // eax\n int v3; // eax\n void *v4; // ecx\n int v5; // eax\n int v6; // eax\n void *v7; // ecx\n int v8; // eax\n void *v10; // [esp-4h] [ebp-14h]\n void *v11; // [esp-4h] [ebp-14h]\n void *v12; // [esp-4h] [ebp-14h]\n __int64 v13; // [esp+0h] [ebp-10h] BYREF\n __int64 v14; // [esp+8h] [ebp-8h] BYREF\n\n v1 = sub_FFE2F356(this); /*0xffe2f2cd*/\n v13 = ((__int64 (__cdecl *)(int))*(_DWORD *)(v1 + 16))(113); /*0xffe2f2d8*/\n v2 = sub_FFE2F356(v10); /*0xffe2f2df*/\n v14 = ((__int64 (__cdecl *)(int))*(_DWORD *)(v2 + 16))(114); /*0xffe2f2e9*/\n if ( !v14 ) /*0xffe2f2f4*/\n {\n v3 = sub_FFE2F0F6(-15663104, (unsigned int *)&v13, (int *)&v14); /*0xffe2f304*/\n v4 = v11; /*0xffe2f309*/\n if ( v3 >= 0 || (v5 = sub_FFE2F0F6(-4194304, (unsigned int *)&v13, (int *)&v14), v4 = v12, v5 >= 0) ) /*0xffe2f324*/\n {\n v6 = sub_FFE2F356(v4); /*0xffe2f326*/\n (*(void (__cdecl **)(int, _DWORD, _DWORD))(v6 + 72))(113, v13, HIDWORD(v13)); /*0xffe2f335*/\n v8 = sub_FFE2F356(v7); /*0xffe2f33b*/\n (*(void (__cdecl **)(int, _DWORD, _DWORD))(v8 + 72))(114, v14, HIDWORD(v14)); /*0xffe2f34a*/\n }\n }\n return 0; /*0xffe2f352*/\n}","refs":[{"addr":"0xffe2f356","name":"sub_FFE2F356"},{"addr":"0xffe2f0f6","name":"sub_FFE2F0F6"}]}
=== DECOMPILE 0xffe2f3ae ===
{"addr":"0xffe2f3ae","code":"bool __fastcall sub_FFE2F3AE(int a1, int a2)\n{\n __int64 v4; // rax\n int v5; // ebp\n __int64 v6; // rax\n int v7; // edi\n __int64 v8; // kr00_8\n __int64 v9; // rax\n int v11; // [esp+10h] [ebp-Ch]\n int v12; // [esp+14h] [ebp-8h]\n\n v4 = sub_FFE2F4CD((void *)a1); /*0xffe2f3b9*/\n v12 = HIDWORD(v4); /*0xffe2f3c0*/\n v5 = v4; /*0xffe2f3c4*/\n v6 = sub_FFE2F4CD((void *)a2); /*0xffe2f3c6*/\n v11 = HIDWORD(v6); /*0xffe2f3ce*/\n v7 = v6; /*0xffe2f3d2*/\n v8 = sub_FFE2F4CD((void *)(a1 + 8)); /*0xffe2f3e0*/\n v9 = sub_FFE2F4CD((void *)(a2 + 8)); /*0xffe2f3e2*/\n return v5 == v7 && v12 == v11 && v8 == v9; /*0xffe2f405*/\n}","refs":[{"addr":"0xffe2f4cd","name":"sub_FFE2F4CD"}]}
=== DECOMPILE 0xffe2f43e ===
{"addr":"0xffe2f43e","code":"int sub_FFE2F43E(int a1, const char *_nASSERT_EFI_ERROR_(Status___%r)_n, ...)\n{\n int result; // eax\n int (__cdecl **v3)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n);\n result = sub_FFE2F40D(); /*0xffe2f43f*/\n v3 = (int (__cdecl **)(int, const char *, char *))result; /*0xffe2f444*/\n if ( result ) /*0xffe2f448*/\n {\n result = sub_FFE2F585(); /*0xffe2f44a*/\n if ( (result & a1) != 0 ) /*0xffe2f455*/\n return (*v3)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe2f461*/\n }\n return result; /*0xffe2f466*/\n}","refs":[{"addr":"0xffe2f40d","name":"sub_FFE2F40D"},{"addr":"0xffe2f585","name":"sub_FFE2F585"}]}
=== DECOMPILE 0xffe2f486 ===
{"addr":"0xffe2f486","code":"int __fastcall sub_FFE2F486(int a1, _DWORD *a2)\n{\n _EAX = 1; /*0xffe2f4a2*/\n __asm { cpuid } /*0xffe2f4a5*/\n if ( a2 ) /*0xffe2f4ab*/\n *a2 = _EAX; /*0xffe2f4ad*/\n return 1; /*0xffe2f4c8*/\n}"}
=== DECOMPILE 0xffe2f4f9 ===
{"addr":"0xffe2f4f9","code":"__int64 __cdecl sub_FFE2F4F9()\n{\n return 0xFFE0000000000000uLL; /*0xffe2f528*/\n}"}
=== DECOMPILE 0xffe2f52c ===
{"addr":"0xffe2f52c","code":"unsigned __int64 __cdecl sub_FFE2F52C(int a1, unsigned int a2)\n{\n return (unsigned __int64)a2 >> 18; /*0xffe2f54f*/\n}"}
=== DECOMPILE 0xffe2f585 ===
{"addr":"0xffe2f585","code":"int sub_FFE2F585()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe2f58b*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe2f590*/\n n3 = __inbyte(0x71u); /*0xffe2f597*/\n n3_1 = n3; /*0xffe2f598*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe2f59d*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe2f5b8*/\n return 0; /*0xffe2f5b8*/\n goto LABEL_5; /*0xffe2f5b8*/\n }\n n3_1 = n3; /*0xffe2f59f*/\n if ( !n3 ) /*0xffe2f5a7*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe2f5b3*/\n goto LABEL_4; /*0xffe2f5b3*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe2f5d0*/\n}","refs":[{"addr":"0xffe2f8dc","name":"n3"}]}
=== DECOMPILE 0xffe2f5d4 ===
{"addr":"0xffe2f5d4","code":"void *__thiscall sub_FFE2F5D4(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe2f5da*/\n sub_FFE2F468((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe2f5e9*/\n this_1 = this; /*0xffe2f5ef*/\n __sidt(this); /*0xffe2f5f2*/\n return this_1; /*0xffe2f5f6*/\n}","refs":[{"addr":"0xffe2f468","name":"sub_FFE2F468"},{"addr":"0xffe2f72c","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c"},{"addr":"0xffe2f714","name":"aIdtrVoid0","string":"Idtr != ((void *) 0)"}]}
=== DECOMPILE 0xffe2f0f1 ===
{"addr":"0xffe2f0f1","code":"// attributes: thunk\nEFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n void *v2; // ecx\n\n return ModuleEntryPoint_0(v2);\n}","refs":[{"addr":"0xffe2f2c4","name":"_ModuleEntryPoint_0"}]}
=== DECOMPILE 0xffe2f07c ===
{"addr":"0xffe2f07c","code":"void *__cdecl sub_FFE2F07C(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe2f089*/\n return buf; /*0xffe2f08f*/\n}"}
=== DECOMPILE 0xffe2f0bc ===
{"addr":"0xffe2f0bc","code":"int __cdecl sub_FFE2F0BC(int a1, int a2, int a3, int a4)\n{\n do /*0xffe2f0d5*/\n {\n *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffe2f0cd*/\n *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffe2f0d1*/\n }\n while ( a2 ); /*0xffe2f0d5*/\n return a1; /*0xffe2f0d9*/\n}"}
=== DECOMPILE 0xffe2f0dc ===
{"addr":"0xffe2f0dc","code":"void *__cdecl sub_FFE2F0DC(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe2f0e9*/\n return buf; /*0xffe2f0ef*/\n}"}