Newer
Older
AMI-Aptio-BIOS-Reversed / SBPEI / SBPEI.c
@Ajax Dong Ajax Dong 2 days ago 16 KB Init
//
// SBPEI.efi - Full Decompilation
// Source: IDA Pro MCP port 13384
// Functions: 26
//

#include <Uefi.h>
#include <PiPei.h>

{"addr":"0xffe2fc38","code":"char *internal_memcpy(char *dst, char *src, unsigned int count)\n{\n unsigned int count_1; // edx\n char *dst_1; // edi\n char *src_1; // esi\n\n count_1 = count; /*0xffe2fc42*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe2fc50*/\n {\n src_1 = &src[count - 1]; /*0xffe2fc64*/\n dst_1 = &dst[count - 1]; /*0xffe2fc66*/\n }\n else\n {\n count_1 = count & 3; /*0xffe2fc54*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe2fc5d*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe2fc5d*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe2fc5d*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe2fc6d*/\n return dst; /*0xffe2fc74*/\n}"}

{"addr":"0xffe2fc78","code":"void *internal_memset(void *buf, unsigned int count, char value)\n{\n memset(buf, value, count); /*0xffe2fc85*/\n return buf; /*0xffe2fc8b*/\n}"}

{"addr":"0xffe2fc98","code":"int fn_addr(int a1, int a2, int a3, int a4)\n{\n do /*0xffe2fcb1*/\n {\n *(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe2fca9*/\n *(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe2fcad*/\n }\n while ( a2 ); /*0xffe2fcb1*/\n return a1; /*0xffe2fcb5*/\n}"}

{"addr":"0xffe2fcb8","code":"void *sub_FFE2FCB8(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe2fcc5*/\n return buf; /*0xffe2fccb*/\n}"}

{"addr":"0xffe2fcd8","code":"EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n (*(void ( **)(EFI_SYSTEM_TABLE *, int, int, _DWORD, _DWORD, _DWORD))(LODWORD(SystemTable->Hdr.Signature) + 88))( /*0xffe2fcef*/\n SystemTable,\n 1,\n 397312,\n 0,\n 0,\n 0);\n sub_FFE2FD3A(); /*0xffe2fcf2*/\n if ( (*(int ( **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 24))(\n SystemTable,\n &unk_FFE309D4) < 0 )\n {\n sub_FFE300F9(\n -1,\n SystemTable,\n \"ASSERT in %s on %i: %s\\n\",\n \"e:\\\\hs\\\\AmiCRBPkg\\\\Chipset\\\\SB\\\\SBPEI.c\",\n 239,\n \"!EFI_ERROR(Status)\");\n while ( 1 ) /*0xffe2fd2f*/\n ; /*0xffe2fd2f*/\n }\n return 0; /*0xffe2fd34*/\n}","refs":[{"addr":"0xffe2fd3a","name":"sub_FFE2FD3A"},{"addr":"0xffe300f9","name":"sub_FFE300F9"},{"addr":"0xffe30614","name":"aAssertInSOnIS","string":"ASSERT in %s on %i: %s\n"},{"addr":"0xffe305f0","name":"aEHsAmicrbpkgCh","string":"e:\\hs\\AmiCRBPkg\\Chipset\\SB\\SBPEI.c"},{"addr":"0xffe305dc","name":"aEfiErrorStatus","string":"!EFI_ERROR(Status)"},{"addr":"0xffe309d4","name":"unk_FFE309D4"}]}

{"addr":"0xffe2fd3a","code":"char sub_FFE2FD3A()\n{\n unsigned __int8 n0x12; // al\n int n128_1; // eax\n __int16 v2; // si\n unsigned __int8 n0xA0; // al\n unsigned __int8 n0x64; // bl\n int v5; // eax\n int v7; // [esp+10h] [ebp-18h] BYREF\n int n128; // [esp+14h] [ebp-14h]\n _DWORD v9[4]; // [esp+18h] [ebp-10h] BYREF\n\n __outbyte(0x70u, 8u); /*0xffe2fd4f*/\n n0x12 = __inbyte(0x71u); /*0xffe2fd56*/\n if ( n0x12 > 0x12u ) /*0xffe2fd59*/\n {\n __outbyte(0x70u, 8u); /*0xffe2fd60*/\n __outbyte(0x71u, 0); /*0xffe2fd66*/\n }\n n128_1 = (unsigned __int16)sub_FFE2FF1C(0x404u); /*0xffe2fd71*/\n n128 = n128_1; /*0xffe2fd79*/\n if ( (n128_1 & 0x80u) != 0 ) /*0xffe2fd7f*/\n {\n v2 = sub_FFE2FF1C(0x406u); /*0xffe2fd8f*/\n v9[3] = 0; /*0xffe2fd98*/\n v9[2] = 512; /*0xffe2fda1*/\n v9[1] = 0; /*0xffe2fdac*/\n v9[0] = 1024000; /*0xffe2fdb0*/\n sub_FFE30177(0, 0, v9, &v7); /*0xffe2fdb8*/\n if ( (sub_FFE2FF4C((unsigned __int16 *)(v7 + 164)) & 4) == 0 ) /*0xffe2fdd1*/\n {\n __outbyte(0x70u, 0x32u); /*0xffe2fdd8*/\n n0xA0 = __inbyte(0x71u); /*0xffe2fddc*/\n if ( n0xA0 < 0xA0u && (n0xA0 & 0xFu) < 0xA ) /*0xffe2fde9*/\n {\n n0x64 = sub_FFE2FFAD(n0xA0) + 1; /*0xffe2fdf2*/\n if ( n0x64 >= 0x64u ) /*0xffe2fdf8*/\n {\n v5 = sub_FFE3000A(); /*0xffe2fdfa*/\n if ( v5 ) /*0xffe2fe01*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe2fe12*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\String.c\",\n 1785,\n \"Value < 100\");\n }\n __outbyte(0x70u, 0x32u); /*0xffe2fe1d*/\n __outbyte(0x71u, (n0x64 % 0xAu) | (16 * (n0x64 / 0xAu))); /*0xffe2fe30*/\n }\n }\n LOBYTE(n128_1) = 0x80; /*0xffe2fe39*/\n __outbyte(0x404u, 0x80u); /*0xffe2fe3b*/\n if ( (_WORD)n128 == 128 && !v2 ) /*0xffe2fe46*/\n {\n __outdword(0x534u, 0x2000u); /*0xffe2fe52*/\n LOBYTE(n128_1) = 0; /*0xffe2fe4d*/\n }\n }\n return n128_1; /*0xffe2fe53*/\n}","refs":[{"addr":"0xffe2ff1c","name":"sub_FFE2FF1C"},{"addr":"0xffe30177","name":"sub_FFE30177"},{"addr":"0xffe2ffad","name":"sub_FFE2FFAD"},{"addr":"0xffe3000a","name":"sub_FFE3000A"},{"addr":"0xffe2ff4c","name":"sub_FFE2FF4C"}]}

{"addr":"0xffe2fe5b","code":"int sub_FFE2FE5B(int a1, _BYTE *a2, _BYTE *a3, _BYTE *a4, _BYTE *a5)\n{\n *a3 = a2[9]; /*0xffe2fe66*/\n *a4 = a2[10]; /*0xffe2fe6f*/\n *a5 = a2[11]; /*0xffe2fe78*/\n return 0; /*0xffe2fe7c*/\n}"}

{"addr":"0xffe2fe7d","code":"int sub_FFE2FE7D(int a1, unsigned __int8 *a2, int a3)\n{\n int v3; // esi\n int v4; // eax\n void *v5; // ecx\n int v6; // esi\n unsigned __int16 *v7; // esi\n unsigned __int16 v8; // ax\n void *v10; // [esp-4h] [ebp-10h]\n\n sub_FFE3003B(64, \"\\nSbPei.c : \\nRecInitSbSataController\");\n v3 = ((a2[11] & 7 | (8 * (a2[10] & 0x1F | (32 *a2[9])))) << 12) | 0x9E; /*0xffe2feb1*/\n v4 = sub_FFE3016B(v10); /*0xffe2feb7*/\n LOBYTE(v5) = *(_BYTE *)(v4 + v3) & 0xFE; /*0xffe2febf*/\n *(_BYTE *)(v4 + v3) = (_BYTE)v5; /*0xffe2fec2*/\n v6 = ((a2[11] & 7 | (8 * (a2[10] & 0x1F | (32 *a2[9])))) << 12) | 4; /*0xffe2fee4*/\n v7 = (unsigned __int16 *)(sub_FFE3016B(v5) + v6); /*0xffe2feec*/\n v8 = sub_FFE2FF4C(v7); /*0xffe2fef0*/\n sub_FFE2FF7A(v7, v8 | 6); /*0xffe2fefd*/\n *(_DWORD *)(a3 + 12) = -1; /*0xffe2ff0c*/\n return 0; /*0xffe2ff06*/\n}","refs":[{"addr":"0xffe3003b","name":"sub_FFE3003B"},{"addr":"0xffe3062c","name":"aSbpeiCRecinits","string":"\nSbPei.c : \nRecInitSbSataController"},{"addr":"0xffe3016b","name":"sub_FFE3016B"},{"addr":"0xffe2ff4c","name":"sub_FFE2FF4C"},{"addr":"0xffe2ff7a","name":"sub_FFE2FF7A"}]}

{"addr":"0xffe2ff1c","code":"int __thiscall sub_FFE2FF1C(unsigned __int16 n1028)\n{\n int v2; // eax\n int result; // eax\n\n if ( (n1028 & 1) != 0 ) /*0xffe2ff22*/\n {\n v2 = sub_FFE3000A(); /*0xffe2ff24*/\n if ( v2 ) /*0xffe2ff2b*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe2ff3c*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLibMsc.c\",\n 133,\n \"(Port & 1) == 0\");\n }\n LOWORD(result) = __inword(n1028); /*0xffe2ff45*/\n return (unsigned __int16)result; /*0xffe2ff4a*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe2ff4c","code":"int sub_FFE2FF4C(unsigned __int16 *a1)\n{\n int v2; // eax\n\n if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe2ff52*/\n {\n v2 = sub_FFE3000A(); /*0xffe2ff54*/\n if ( v2 ) /*0xffe2ff5b*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe2ff6c*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLib.c\",\n 151,\n \"(Address & 1) == 0\");\n }\n return *a1; /*0xffe2ff78*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe2ff7a","code":"__int16 sub_FFE2FF7A(_WORD *a1, __int16 a2)\n{\n int v4; // eax\n\n if ( ((unsigned __int8)a1 & 1) != 0 ) /*0xffe2ff84*/\n {\n v4 = sub_FFE3000A(); /*0xffe2ff86*/\n if ( v4 ) /*0xffe2ff8d*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe2ff9e*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseIoLibIntrinsic\\\\IoLib.c\",\n 183,\n \"(Address & 1) == 0\");\n }\n *a1 = a2; /*0xffe2ffa4*/\n return a2; /*0xffe2ffaa*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe2ffad","code":"int sub_FFE2FFAD(unsigned __int8 n0xA0)\n{\n int v2; // eax\n int v3; // eax\n\n if ( n0xA0 >= 0xA0u ) /*0xffe2ffb9*/\n {\n v2 = sub_FFE3000A(); /*0xffe2ffbb*/\n if ( v2 ) /*0xffe2ffc2*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe2ffcf*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\String.c\",\n 1809,\n \"Value < 0xa0\");\n }\n if ( (n0xA0 & 0xFu) >= 0xA ) /*0xffe2ffdb*/\n {\n v3 = sub_FFE3000A(); /*0xffe2ffdd*/\n if ( v3 ) /*0xffe2ffe4*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe2fff1*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\String.c\",\n 1810,\n \"(Value & 0xf) < 0xa\");\n }\n return (n0xA0 & 0xF) + 10 * (n0xA0 >> 4); /*0xffe30005*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe3000a","code":"int sub_FFE3000A()\n{\n int v0; // eax\n int v2; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFE303FD(); /*0xffe3000f*/\n if ( (*(int ( **)(int, void *, _DWORD, int *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFE30998, 0, &v2, &v3) >= 0 ) /*0xffe3002e*/\n return v3; /*0xffe30034*/\n else\n return 0; /*0xffe30030*/\n}","refs":[{"addr":"0xffe303fd","name":"sub_FFE303FD"},{"addr":"0xffe30998","name":"unk_FFE30998"}]}

{"addr":"0xffe3003b","code":"int sub_FFE3003B(int n64, char *_nSbPei.c_:__nRecInitSbSataController, ...)\n{\n int result; // eax\n int ( **v3)(int, char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, _nSbPei.c_:__nRecInitSbSataController);\n result = sub_FFE3000A(); /*0xffe3003c*/\n v3 = (int ( **)(int, char *, char *))result; /*0xffe30041*/\n if ( result ) /*0xffe30045*/\n {\n result = sub_FFE30195(); /*0xffe30047*/\n if ( (result & n64) != 0 ) /*0xffe30052*/\n return (*v3)(n64, _nSbPei.c_:__nRecInitSbSataController, (char *)va); /*0xffe3005e*/\n }\n return result; /*0xffe30063*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"},{"addr":"0xffe30195","name":"sub_FFE30195"}]}

{"addr":"0xffe30065","code":"int sub_FFE30065(\n int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n int n48,\n int PeiServices____((void__)_0))\n{\n int result; // eax\n\n result = sub_FFE3000A(); /*0xffe3006b*/\n if ( result ) /*0xffe30072*/\n return (*(int ( **)(int, int, int))(result + 4))( /*0xffe3007a*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return result; /*0xffe30080*/\n}","refs":[{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe30083","code":"int __thiscall sub_FFE30083(void *this)\n{\n int v1; // eax\n int v2; // eax\n int v3; // eax\n int v5; // [esp+0h] [ebp-4h] BYREF\n\n v1 = sub_FFE303FD(); /*0xffe30087*/\n v5 = (int)&v5; /*0xffe3008f*/\n v2 = (*(int ( **)(int, void *, _DWORD, _DWORD))(*(_DWORD *)v1 + 32))(v1, &unk_FFE309A8, 0, 0); /*0xffe3009c*/\n if ( v2 < 0 ) /*0xffe300a4*/\n {\n sub_FFE3003B(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v2); /*0xffe300b1*/\n v3 = sub_FFE3000A(); /*0xffe300b9*/\n if ( v3 ) /*0xffe300c0*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe300ce*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiPcdLib\\\\PeiPcdLib.c\",\n 49,\n \"!EFI_ERROR (Status)\");\n }\n return v5; /*0xffe300d9*/\n}","refs":[{"addr":"0xffe303fd","name":"sub_FFE303FD"},{"addr":"0xffe309a8","name":"unk_FFE309A8"},{"addr":"0xffe3003b","name":"sub_FFE3003B"},{"addr":"0xffe3000a","name":"sub_FFE3000A"}]}

{"addr":"0xffe300db","code":"int __thiscall sub_FFE300DB(void *this)\n{\n int v2; // eax\n\n v2 = sub_FFE30083(this); /*0xffe300de*/\n return (*(int ( **)(void *))(v2 + 16))(this); /*0xffe300e8*/\n}","refs":[{"addr":"0xffe30083","name":"sub_FFE30083"}]}

{"addr":"0xffe300ea","code":"int __thiscall sub_FFE300EA(void *this)\n{\n int v2; // eax\n\n v2 = sub_FFE30083(this); /*0xffe300ed*/\n return (*(int ( **)(void *))(v2 + 20))(this); /*0xffe300f7*/\n}","refs":[{"addr":"0xffe30083","name":"sub_FFE30083"}]}

{"addr":"0xffe300f9","code":"int sub_FFE300F9(int a1, EFI_SYSTEM_TABLE *SystemTable, char *ASSERT_in_%s_on_%i:_%s_n, ...)\n{\n int result; // eax\n char *ASSERT_in_%s_on_%i:_%s_n_1; // eax\n va_list va; // [esp+18h] [ebp+14h] BYREF\n\n va_start(va, ASSERT_in_%s_on_%i:_%s_n);\n result = (*(int (__stdcall **)(EFI_SYSTEM_TABLE *))(LODWORD(SystemTable->Hdr.Signature) + 32))(SystemTable); /*0xffe30112*/\n if ( result >= 0 ) /*0xffe3011a*/\n {\n if ( SystemTable ) /*0xffe30122*/\n {\n result = sub_FFE30195(); /*0xffe30124*/\n if ( (result & a1) != 0 ) /*0xffe3012e*/\n {\n ASSERT_in_%s_on_%i:_%s_n_1 = ASSERT_in_%s_on_%i:_%s_n; /*0xffe30130*/\n if ( *ASSERT_in_%s_on_%i:_%s_n ) /*0xffe30133*/\n {\n do /*0xffe30153*/\n {\n if ( *ASSERT_in_%s_on_%i:_%s_n_1 == 37 ) /*0xffe3013b*/\n {\n if ( *++ASSERT_in_%s_on_%i:_%s_n_1 == 115 ) /*0xffe30143*/\n {\n *ASSERT_in_%s_on_%i:_%s_n_1 = 97; /*0xffe30145*/\n }\n else if ( *ASSERT_in_%s_on_%i:_%s_n_1 == 71 ) /*0xffe3014d*/\n {\n *ASSERT_in_%s_on_%i:_%s_n_1 = 103; /*0xffe3014f*/\n }\n }\n ++ASSERT_in_%s_on_%i:_%s_n_1; /*0xffe30152*/\n }\n while ( *ASSERT_in_%s_on_%i:_%s_n_1 ); /*0xffe30153*/\n ASSERT_in_%s_on_%i:_%s_n_1 = ASSERT_in_%s_on_%i:_%s_n; /*0xffe30158*/\n }\n return ((int ( *)(int, char *, char *))LODWORD(SystemTable->Hdr.Signature))( /*0xffe30161*/\n a1,\n ASSERT_in_%s_on_%i:_%s_n_1,\n (char *)va);\n }\n }\n }\n return result; /*0xffe30169*/\n}","refs":[{"addr":"0xffe30195","name":"sub_FFE30195"}]}

{"addr":"0xffe3016b","code":"int __thiscall sub_FFE3016B(void *this)\n{\n int v1; // eax\n\n v1 = sub_FFE30083(this); /*0xffe3016b*/\n return (*(int ( **)(int))(v1 + 16))(5); /*0xffe30176*/\n}","refs":[{"addr":"0xffe30083","name":"sub_FFE30083"}]}

{"addr":"0xffe30177","code":"int *sub_FFE30177(int a1, int a2, _DWORD *a3, int *a4)\n{\n int v4; // ecx\n\n v4 = sub_FFE3027F((int)a3) + (*a3 & 0xFFFFFFF); /*0xffe3018b*/\n *a4 = v4; /*0xffe30192*/\n return a4; /*0xffe30191*/\n}","refs":[{"addr":"0xffe3027f","name":"sub_FFE3027F"}]}

{"addr":"0xffe30195","code":"int sub_FFE30195()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe3019b*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe301a0*/\n n3 = __inbyte(0x71u); /*0xffe301a7*/\n n3_1 = n3; /*0xffe301a8*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe301ad*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe301c8*/\n return 0; /*0xffe301c8*/\n goto LABEL_5; /*0xffe301c8*/\n }\n n3_1 = n3; /*0xffe301af*/\n if ( !n3 ) /*0xffe301b7*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe301c3*/\n goto LABEL_4; /*0xffe301c3*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe301e0*/\n}","refs":[{"addr":"0xffe30a38","name":"n3"}]}

{"addr":"0xffe301e4","code":"int sub_FFE301E4(_DWORD *a1, int n8)\n{\n int v3; // [esp+Ch] [ebp-4h]\n\n v3 = sub_FFE300EA((void *)6); /*0xffe30214*/\n a1[1] = 16 *n8 + 16; /*0xffe3021d*/\n if ( !a1[4] && !a1[5] ) /*0xffe30239*/\n {\n *(_DWORD *)(v3 + 16) = sub_FFE300DB((void *)5); /*0xffe3025e*/\n *(_DWORD *)(v3 + 20) = 0; /*0xffe30275*/\n }\n return 0; /*0xffe3027b*/\n}","refs":[{"addr":"0xffe300ea","name":"sub_FFE300EA"},{"addr":"0xffe300db","name":"sub_FFE300DB"}]}

{"addr":"0xffe3027f","code":"int sub_FFE3027F(int a1)\n{\n int v2; // [esp+Ch] [ebp-Ch]\n int v3; // [esp+10h] [ebp-8h]\n int v4; // [esp+14h] [ebp-4h]\n\n if ( *(_DWORD *)(a1 + 12) ) /*0xffe30294*/\n {\n v3 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * (unsigned __int16)*(_DWORD *)(a1 + 4) + 255544); /*0xffe3038a*/\n v4 = *(_DWORD *)(*(_DWORD *)(a1 + 12) + 4 * (unsigned __int16)*(_DWORD *)(a1 + 4) + 255560); /*0xffe303a6*/\n }\n else\n {\n v2 = sub_FFE300EA((void *)6); /*0xffe302a7*/\n if ( *(_DWORD *)(v2 + 4) ) /*0xffe302ad*/\n {\n v3 = *(_DWORD *)(v2 + 16 * (unsigned __int16)*(_DWORD *)(a1 + 4) + 20); /*0xffe302c8*/\n v4 = *(_DWORD *)(v2 + 16 * (unsigned __int16)*(_DWORD *)(a1 + 4) + 16); /*0xffe302e0*/\n }\n else\n {\n sub_FFE301E4(dword_FFE30A18, 8); /*0xffe302f3*/\n v3 = dword_FFE30A2C[4 * (unsigned __int16)*(_DWORD *)(a1 + 4)]; /*0xffe3030e*/\n v4 = dword_FFE30A28[4 * (unsigned __int16)*(_DWORD *)(a1 + 4)]; /*0xffe30325*/\n if ( !v4 && !v3 ) /*0xffe30332*/\n {\n v4 = sub_FFE300DB((void *)5); /*0xffe3035f*/\n v3 = 0; /*0xffe3036c*/\n }\n }\n }\n if ( !v4 && !v3 ) /*0xffe303b3*/\n return sub_FFE300DB((void *)5); /*0xffe303e0*/\n return v4; /*0xffe303f9*/\n}","refs":[{"addr":"0xffe300ea","name":"sub_FFE300EA"},{"addr":"0xffe301e4","name":"sub_FFE301E4"},{"addr":"0xffe30a18","name":"dword_FFE30A18"},{"addr":"0xffe30a2c","name":"dword_FFE30A2C"},{"addr":"0xffe30a28","name":"dword_FFE30A28"},{"addr":"0xffe300db","name":"sub_FFE300DB"}]}

{"addr":"0xffe303fd","code":"int __stdcall sub_FFE303FD()\n{\n int v0; // esi\n _BYTE v2[8]; // [esp+4h] [ebp-8h] BYREF\n\n sub_FFE3042F(v2); /*0xffe30406*/\n v0 = *(_DWORD *)(*(_DWORD *)&v2[2] - 4); /*0xffe3040e*/\n if ( !v0 ) /*0xffe30413*/\n sub_FFE30065( /*0xffe30422*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return v0; /*0xffe3042a*/\n}","refs":[{"addr":"0xffe3042f","name":"sub_FFE3042F"},{"addr":"0xffe30065","name":"sub_FFE30065"}]}

{"addr":"0xffe3042f","code":"void *__thiscall sub_FFE3042F(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe30435*/\n sub_FFE30065((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe30444*/\n this_1 = this; /*0xffe3044a*/\n __sidt(this); /*0xffe3044d*/\n return this_1; /*0xffe30451*/\n}","refs":[{"addr":"0xffe30065","name":"sub_FFE30065"}]}