Newer
Older
AMI-Aptio-BIOS-Reversed / PiSmmCommunicationPei / PiSmmCommunicationPei.c
@Ajax Dong Ajax Dong 2 days ago 24 KB Init
//
// PiSmmCommunicationPei.efi - Full Decompilation
// Source: IDA Pro MCP port 13387
// Functions: 25
//

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

{"addr":"0xffe32900","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; /*0xffe3290a*/\n if ( src < dst && &src[count - 1] >= dst ) /*0xffe32918*/\n {\n src_1 = &src[count - 1]; /*0xffe3292c*/\n dst_1 = &dst[count - 1]; /*0xffe3292e*/\n }\n else\n {\n count_1 = count & 3; /*0xffe3291c*/\n qmemcpy(dst, src, 4 * (count >> 2)); /*0xffe32925*/\n src_1 = &src[4 * (count >> 2)]; /*0xffe32925*/\n dst_1 = &dst[4 * (count >> 2)]; /*0xffe32925*/\n }\n qmemcpy(dst_1, src_1, count_1); /*0xffe32935*/\n return dst; /*0xffe3293c*/\n}"}

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

{"addr":"0xffe32980","code":"int fn_addr(int a1, int a2, int a3, int a4)\n{\n do /*0xffe32999*/\n {\n *(_DWORD *)(a1 + 8 *a2 - 8) = a3; /*0xffe32991*/\n *(_DWORD *)(a1 + 8 *a2-- - 4) = a4; /*0xffe32995*/\n }\n while ( a2 ); /*0xffe32999*/\n return a1; /*0xffe3299d*/\n}"}

{"addr":"0xffe329a0","code":"void *sub_FFE329A0(void *buf, unsigned int count, int value)\n{\n memset32(buf, value, count); /*0xffe329ad*/\n return buf; /*0xffe329b3*/\n}"}

{"addr":"0xffe329b5","code":"// attributes: thunk\nEFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)\n{\n return ModuleEntryPoint_0(ImageHandle, SystemTable);\n}","refs":[{"addr":"0xffe32cca","name":"_ModuleEntryPoint_0"}]}

{"addr":"0xffe329ba","code":"int sub_FFE329BA(int n1397574995, int n875978547)\n{\n _DWORD *v2; // ecx\n _DWORD *v3; // esi\n unsigned int v4; // ebp\n int i_1; // ebx\n int v6; // esi\n int j; // edi\n int v9; // eax\n unsigned int v10; // ebp\n int v11; // esi\n int i; // edi\n\n v3 = v2; /*0xffe329c7*/\n if ( n1397574995 != 1397574995 || n875978547 != 875978547 )\n {\n sub_FFE32DD6(64, \"InitCommunicationContext - SmmConfigurationTable: %x\\n\", v2[23]);\n sub_FFE32DD6(64, \"InitCommunicationContext - NumberOfTableEntries: %x\\n\", v3[22]);\n v10 = v3[22]; /*0xffe32a62*/\n i_1 = v3[23]; /*0xffe32a68*/\n v11 = 0; /*0xffe32a6b*/\n if ( v10 ) /*0xffe32a6f*/\n {\n for ( i = i_1; !sub_FFE33012(i, (int)&unk_FFE337C0); i += 20 ) /*0xffe32a71*/\n {\n if ( ++v11 >= v10 ) /*0xffe32a89*/\n return 0; /*0xffe32a89*/\n }\n v9 = 20 *v11; /*0xffe32a8d*/\n return *(_DWORD *)(v9 + i_1 + 16); /*0xffe32a8d*/\n }\n return 0; /*0xffe32a3b*/\n }\n sub_FFE32DD6(64, \"InitCommunicationContext - SmmConfigurationTable: %x\\n\", v2[40]);\n sub_FFE32DD6(64, \"InitCommunicationContext - NumberOfTableEntries: %x\\n\", v3[38]);\n v4 = v3[38]; /*0xffe32a05*/\n i_1 = v3[40]; /*0xffe32a0e*/\n v6 = 0; /*0xffe32a14*/\n if ( !v4 ) /*0xffe32a18*/\n return 0; /*0xffe32a18*/\n for ( j = i_1; !sub_FFE33012(j, (int)&unk_FFE337C0); j += 24 ) /*0xffe32a1a*/\n {\n if ( ++v6 >= v4 ) /*0xffe32a32*/\n return 0; /*0xffe32a32*/\n }\n v9 = 24 *v6; /*0xffe32a3c*/\n return *(_DWORD *)(v9 + i_1 + 16); /*0xffe32a36*/\n}","refs":[{"addr":"0xffe32dd6","name":"sub_FFE32DD6"},{"addr":"0xffe331dc","name":"aInitcommunicat_1","string":"InitCommunicationContext - SmmConfigurationTable: %x\n"},{"addr":"0xffe33214","name":"aInitcommunicat_2","string":"InitCommunicationContext - NumberOfTableEntries: %x\n"},{"addr":"0xffe33012","name":"sub_FFE33012"},{"addr":"0xffe337c0","name":"unk_FFE337C0"}]}

{"addr":"0xffe32a96","code":"char *sub_FFE32A96()\n{\n _WORD *v0; // esi\n int v1; // eax\n int *p_n1397574995; // esi\n void *v3; // ecx\n char *src; // edi\n int v5; // eax\n char *dst; // esi\n int v7; // eax\n\n v0 = sub_FFE32ED1(&unk_FFE337A0); /*0xffe32aaa*/\n if ( !v0 ) /*0xffe32ab3*/\n {\n v1 = sub_FFE32DA5(); /*0xffe32ab5*/\n if ( v1 ) /*0xffe32abc*/\n (*(void ( **)(const char *, int, const char *))(v1 + 4))( /*0xffe32ac9*/\n \"e:\\\\hs\\\\UefiCpuPkg\\\\PiSmmCommunication\\\\PiSmmCommunicationPei.c\",\n 250,\n \"GuidHob != ((void *) 0)\");\n }\n p_n1397574995 = (int *)*((_DWORD *)v0 + 8); /*0xffe32acf*/\n sub_FFE32DD6(64, \"InitCommunicationContext - SmmS3ResumeState: %x\\n\", p_n1397574995);\n sub_FFE32DD6(64, \"InitCommunicationContext - Smst: %x\\n\", *(int *)((char *)p_n1397574995 + 90));\n src = (char *)sub_FFE329BA(*p_n1397574995, p_n1397574995[1]); /*0xffe32b01*/\n if ( !src ) /*0xffe32b08*/\n {\n v5 = sub_FFE32DA5(); /*0xffe32b0a*/\n if ( v5 ) /*0xffe32b11*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe32b1e*/\n \"e:\\\\hs\\\\UefiCpuPkg\\\\PiSmmCommunication\\\\PiSmmCommunicationPei.c\",\n 262,\n \"SmmCommunicationContext != ((void *) 0)\");\n }\n dst = (char *)sub_FFE32F54(v3); /*0xffe32b29*/\n if ( !dst ) /*0xffe32b2d*/\n {\n v7 = sub_FFE32DA5(); /*0xffe32b2f*/\n if ( v7 ) /*0xffe32b36*/\n (*(void ( **)(const char *, int, const char *))(v7 + 4))( /*0xffe32b43*/\n \"e:\\\\hs\\\\UefiCpuPkg\\\\PiSmmCommunication\\\\PiSmmCommunicationPei.c\",\n 180,\n \"Hob.Raw\");\n }\n return sub_FFE32F72(dst, src, 0x10u); /*0xffe32b55*/\n}","refs":[{"addr":"0xffe32ed1","name":"sub_FFE32ED1"},{"addr":"0xffe337a0","name":"unk_FFE337A0"},{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33198","name":"aEHsUeficpupkgP","string":"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c"},{"addr":"0xffe33180","name":"aGuidhobVoid0","string":"GuidHob != ((void *) 0)"},{"addr":"0xffe32dd6","name":"sub_FFE32DD6"},{"addr":"0xffe3324c","name":"aInitcommunicat","string":"InitCommunicationContext - SmmS3ResumeState: %x\n"},{"addr":"0xffe33280","name":"aInitcommunicat_0","string":"InitCommunicationContext - Smst: %x\n"},{"addr":"0xffe329ba","name":"sub_FFE329BA"},{"addr":"0xffe332a8","name":"aSmmcommunicati","string":"SmmCommunicationContext != ((void *) 0)"},{"addr":"0xffe32f54","name":"sub_FFE32F54"},{"addr":"0xffe331d4","name":"aHobRaw","string":"Hob.Raw"},{"addr":"0xffe32f72","name":"sub_FFE32F72"}]}

{"addr":"0xffe32b5c","code":"int sub_FFE32B5C(int a1, int a2)\n{\n int v3; // eax\n int v4; // eax\n _WORD *v5; // esi\n int v6; // eax\n _DWORD *v7; // eax\n int v8; // eax\n int v9; // eax\n int v10; // eax\n _DWORD *v11; // eax\n int ( **v12)(int, _DWORD, _BYTE *, int *, _DWORD, _DWORD); // [esp-14h] [ebp-34h]\n char v13; // [esp+13h] [ebp-Dh] BYREF\n int ( **v14)(int, _DWORD, char *, int *, _DWORD, _DWORD); // [esp+14h] [ebp-Ch] BYREF\n int v15; // [esp+18h] [ebp-8h] BYREF\n int v16; // [esp+1Ch] [ebp-4h] BYREF\n\n sub_FFE32DD6(64, \"PiSmmCommunicationPei Communicate Enter\\n\"); /*0xffe32b6f*/\n if ( !a2 ) /*0xffe32b7b*/\n return -2147483646; /*0xffe32b82*/\n v3 = sub_FFE330D1(); /*0xffe32b87*/\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int ( ***)(int, _DWORD, char *, int *, _DWORD, _DWORD)))(*(_DWORD *)v3 + 32))( /*0xffe32ba5*/\n v3,\n &unk_FFE337B0,\n 0,\n 0,\n &v14) < 0 )\n return -2147483629; /*0xffe32ba5*/\n v4 = sub_FFE330D1(); /*0xffe32bb1*/\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v15) < 0 ) /*0xffe32bcd*/\n return -2147483629; /*0xffe32bcd*/\n if ( !*(_BYTE *)(v15 + 16) ) /*0xffe32bd3*/\n {\n sub_FFE32DD6(64, \"PiSmmCommunicationPei LockState - %x\\n\", 0); /*0xffe32be0*/\n return -2147483629; /*0xffe32bac*/\n }\n v5 = sub_FFE32ED1(&unk_FFE337C0); /*0xffe32bf4*/\n if ( !v5 ) /*0xffe32bf8*/\n {\n v6 = sub_FFE32DA5(); /*0xffe32bfa*/\n if ( v6 ) /*0xffe32c01*/\n (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe32c12*/\n \"e:\\\\hs\\\\UefiCpuPkg\\\\PiSmmCommunication\\\\PiSmmCommunicationPei.c\",\n 155,\n \"GuidHob != ((void *) 0)\");\n }\n sub_FFE32DD6(\n 64,\n \"PiSmmCommunicationPei BufferPtrAddress - 0x%016lx, BufferPtr: 0x%016lx\\n\",\n *((_DWORD *)v5 + 8),\n *((_DWORD *)v5 + 9));\n v7 = (_DWORD *)*((_DWORD *)v5 + 8); /*0xffe32c30*/\n *v7 = a2; /*0xffe32c3b*/\n v7[1] = 0; /*0xffe32c3d*/\n sub_FFE32DD6(64, \"PiSmmCommunicationPei CommBuffer - %x\\n\", a2); /*0xffe32c40*/\n v13 = *((_BYTE *)v5 + 28); /*0xffe32c4b*/\n v16 = 1; /*0xffe32c53*/\n v12 = v14; /*0xffe32c63*/\n v8 = sub_FFE330D1(); /*0xffe32c67*/\n v9 = (*v14)(v8, v12, &v13, &v16, 0, 0); /*0xffe32c71*/\n if ( v9 < 0 ) /*0xffe32c78*/\n {\n sub_FFE32DD6(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v9); /*0xffe32c85*/\n v10 = sub_FFE32DA5(); /*0xffe32c8d*/\n if ( v10 ) /*0xffe32c94*/\n (*(void ( **)(const char *, int, const char *))(v10 + 4))( /*0xffe32ca5*/\n \"e:\\\\hs\\\\UefiCpuPkg\\\\PiSmmCommunication\\\\PiSmmCommunicationPei.c\",\n 357,\n \"!EFI_ERROR (Status)\");\n }\n v11 = (_DWORD *)*((_DWORD *)v5 + 8); /*0xffe32cab*/\n *v11 = 0; /*0xffe32cb5*/\n v11[1] = 0; /*0xffe32cb7*/\n sub_FFE32DD6(64, \"PiSmmCommunicationPei Communicate Exit\\n\"); /*0xffe32cba*/\n return 0; /*0xffe32cc3*/\n}","refs":[{"addr":"0xffe32dd6","name":"sub_FFE32DD6"},{"addr":"0xffe332d0","name":"aPismmcommunica","string":"PiSmmCommunicationPei Communicate Enter\n"},{"addr":"0xffe330d1","name":"sub_FFE330D1"},{"addr":"0xffe337b0","name":"unk_FFE337B0"},{"addr":"0xffe33780","name":"unk_FFE33780"},{"addr":"0xffe332fc","name":"aPismmcommunica_0","string":"PiSmmCommunicationPei LockState - %x\n"},{"addr":"0xffe32ed1","name":"sub_FFE32ED1"},{"addr":"0xffe337c0","name":"unk_FFE337C0"},{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33198","name":"aEHsUeficpupkgP","string":"e:\\hs\\UefiCpuPkg\\PiSmmCommunication\\PiSmmCommunicationPei.c"},{"addr":"0xffe33180","name":"aGuidhobVoid0","string":"GuidHob != ((void *) 0)"},{"addr":"0xffe33328","name":"aPismmcommunica_1","string":"PiSmmCommunicationPei BufferPtrAddress - 0x%016lx, BufferPtr: 0x%016lx\n"},{"addr":"0xffe33370","name":"aPismmcommunica_2","string":"PiSmmCommunicationPei CommBuffer - %x\n"},{"addr":"0xffe33398","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe333bc","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe333d0","name":"aPismmcommunica_3","string":"PiSmmCommunicationPei Communicate Exit\n"}]}

{"addr":"0xffe32cca","code":"int ModuleEntryPoint_0()\n{\n int v0; // eax\n int v1; // eax\n int v2; // eax\n int v4; // eax\n int v5; // esi\n int v6; // eax\n unsigned __int8 v7; // cl\n int v8; // eax\n int v9; // eax\n int v10; // eax\n int v11; // [esp-Ch] [ebp-14h]\n int n17; // [esp+0h] [ebp-8h] BYREF\n int v13; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFE330D1(); /*0xffe32ccf*/\n v1 = (*(int ( **)(int, int *))(*(_DWORD *)v0 + 40))(v0, &n17); /*0xffe32cdb*/\n if ( v1 < 0 ) /*0xffe32ce2*/\n {\n sub_FFE32DD6(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v1); /*0xffe32cef*/\n v2 = sub_FFE32DA5(); /*0xffe32cf7*/\n if ( v2 ) /*0xffe32cfe*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe32d0f*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 216,\n \"!EFI_ERROR (Status)\");\n }\n if ( n17 != 17 ) /*0xffe32d19*/\n return -2147483645; /*0xffe32d1b*/\n v4 = sub_FFE330D1(); /*0xffe32d23*/\n v5 = 0; /*0xffe32d2b*/\n if ( (*(int ( **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v4 + 32))(v4, &unk_FFE33780, 0, 0, &v13) < 0 ) /*0xffe32d40*/\n return -2147483629; /*0xffe32d42*/\n v6 = v13; /*0xffe32d49*/\n v7 = *(_BYTE *)(v13 + 16); /*0xffe32d4c*/\n if ( v7 ) /*0xffe32d51*/\n {\n sub_FFE32DD6(64, \"PiSmmCommunicationPei LockState - %x\\n\", v7); /*0xffe32d5e*/\n return -2147483633; /*0xffe32d66*/\n }\n else\n {\n while ( 1 ) /*0xffe32d6e*/\n {\n v11 = v6; /*0xffe32d6e*/\n v8 = sub_FFE330D1(); /*0xffe32d6f*/\n v9 = (*(int ( **)(int, int, int))v13)(v8, v11, v5++); /*0xffe32d78*/\n if ( v9 < 0 ) /*0xffe32d80*/\n break; /*0xffe32d80*/\n v6 = v13; /*0xffe32d82*/\n }\n sub_FFE32A96(); /*0xffe32d87*/\n v10 = sub_FFE330D1(); /*0xffe32d8c*/\n (*(void ( **)(int, void *))(*(_DWORD *)v10 + 24))(v10, &unk_FFE337D0); /*0xffe32d99*/\n return 0; /*0xffe32d9e*/\n }\n}","refs":[{"addr":"0xffe330d1","name":"sub_FFE330D1"},{"addr":"0xffe32dd6","name":"sub_FFE32DD6"},{"addr":"0xffe33398","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33410","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe333bc","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe33780","name":"unk_FFE33780"},{"addr":"0xffe332fc","name":"aPismmcommunica_0","string":"PiSmmCommunicationPei LockState - %x\n"},{"addr":"0xffe32a96","name":"sub_FFE32A96"},{"addr":"0xffe337d0","name":"unk_FFE337D0"}]}

{"addr":"0xffe32da5","code":"int sub_FFE32DA5()\n{\n int v0; // eax\n _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF\n int v3; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFE330D1(); /*0xffe32daa*/\n if ( (*(int ( **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFE33790, 0, v2, &v3) >= 0 ) /*0xffe32dc9*/\n return v3; /*0xffe32dcf*/\n else\n return 0; /*0xffe32dcb*/\n}","refs":[{"addr":"0xffe330d1","name":"sub_FFE330D1"},{"addr":"0xffe33790","name":"unk_FFE33790"}]}

{"addr":"0xffe32dd6","code":"int sub_FFE32DD6(int a1, const char *a2, ...)\n{\n int result; // eax\n int ( **v3)(int, const char *, char *); // esi\n va_list va; // [esp+10h] [ebp+Ch] BYREF\n\n va_start(va, a2);\n result = sub_FFE32DA5(); /*0xffe32dd7*/\n v3 = (int ( **)(int, const char *, char *))result; /*0xffe32ddc*/\n if ( result ) /*0xffe32de0*/\n {\n result = sub_FFE33103(); /*0xffe32de2*/\n if ( (result & a1) != 0 ) /*0xffe32ded*/\n return (*v3)(a1, a2, (char *)va); /*0xffe32df9*/\n }\n return result; /*0xffe32dfe*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33103","name":"sub_FFE33103"}]}

{"addr":"0xffe32e00","code":"int sub_FFE32E00(\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_FFE32DA5(); /*0xffe32e06*/\n if ( result ) /*0xffe32e0d*/\n return (*(int ( **)(int, int, int))(result + 4))( /*0xffe32e15*/\n e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ,\n n48,\n PeiServices____((void__)_0));\n return result; /*0xffe32e1b*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"}]}

{"addr":"0xffe32e1e","code":"int sub_FFE32E1E()\n{\n int v0; // eax\n int v1; // eax\n int v2; // eax\n int v3; // eax\n int v5; // [esp+4h] [ebp-4h] BYREF\n\n v0 = sub_FFE330D1(); /*0xffe32e23*/\n v1 = (*(int ( **)(int, int *))(*(_DWORD *)v0 + 48))(v0, &v5); /*0xffe32e2f*/\n if ( v1 < 0 ) /*0xffe32e3b*/\n {\n sub_FFE32DD6(0x80000000, \"\\nASSERT_EFI_ERROR (Status = %r)\\n\", v1); /*0xffe32e48*/\n v2 = sub_FFE32DA5(); /*0xffe32e50*/\n if ( v2 ) /*0xffe32e57*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe32e61*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 50,\n \"!EFI_ERROR (Status)\");\n }\n if ( !v5 ) /*0xffe32e6b*/\n {\n v3 = sub_FFE32DA5(); /*0xffe32e6d*/\n if ( v3 ) /*0xffe32e74*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe32e7e*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 51,\n \"HobList != ((void *) 0)\");\n }\n return v5; /*0xffe32e87*/\n}","refs":[{"addr":"0xffe330d1","name":"sub_FFE330D1"},{"addr":"0xffe32dd6","name":"sub_FFE32DD6"},{"addr":"0xffe33398","name":"aAssertEfiError","string":"\nASSERT_EFI_ERROR (Status = %r)\n"},{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33410","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe333bc","name":"aEfiErrorStatus","string":"!EFI_ERROR (Status)"},{"addr":"0xffe33438","name":"aHoblistVoid0","string":"HobList != ((void *) 0)"}]}

{"addr":"0xffe32e8c","code":"_WORD *sub_FFE32E8C(int a1, _WORD *i)\n{\n _WORD *i_1; // esi\n int v3; // eax\n\n i_1 = i; /*0xffe32e8d*/\n if ( !i ) /*0xffe32e91*/\n {\n v3 = sub_FFE32DA5(); /*0xffe32e93*/\n if ( v3 ) /*0xffe32e9a*/\n (*(void ( **)(const char *, int, const char *))(v3 + 4))( /*0xffe32ea8*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 82,\n \"HobStart != ((void *) 0)\");\n }\n while ( 1 ) /*0xffe32ec1*/\n {\n if ( *i_1 == 0xFFFF ) /*0xffe32ec7*/\n return 0; /*0xffe32ecc*/\n if ( *i_1 == 4 ) /*0xffe32eb9*/\n break; /*0xffe32eb9*/\n i_1 = (_WORD *)((char *)i_1 + (unsigned __int16)i_1[1]); /*0xffe32ebf*/\n }\n return i_1; /*0xffe32ecb*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33410","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe33450","name":"aHobstartVoid0","string":"HobStart != ((void *) 0)"}]}

{"addr":"0xffe32ed1","code":"_WORD *__thiscall sub_FFE32ED1(void *this)\n{\n _WORD *i; // edx\n int v3; // ecx\n _WORD *v4; // eax\n _WORD *v5; // esi\n\n for ( i = (_WORD *)sub_FFE32E1E(); ; i = (_WORD *)((char *)v5 + (unsigned __int16)v5[1]) ) /*0xffe32edb*/\n {\n v4 = sub_FFE32E8C(v3, i); /*0xffe32ef3*/\n v5 = v4; /*0xffe32ef8*/\n if ( !v4 || sub_FFE33012((int)this, (int)(v4 + 4)) ) /*0xffe32ee4*/\n break; /*0xffe32ee4*/\n }\n return v5; /*0xffe32efe*/\n}","refs":[{"addr":"0xffe32e1e","name":"sub_FFE32E1E"},{"addr":"0xffe32e8c","name":"sub_FFE32E8C"},{"addr":"0xffe33012","name":"sub_FFE33012"}]}

{"addr":"0xffe32f04","code":"int sub_FFE32F04(void *this, int n40)\n{\n int v3; // eax\n int v4; // eax\n int v6; // [esp+4h] [ebp-4h] BYREF\n\n v3 = sub_FFE330D1(); /*0xffe32f0b*/\n if ( (*(int ( **)(int, int, int, int *))(*(_DWORD *)v3 + 52))(v3, 4, n40, &v6) < 0 ) /*0xffe32f23*/\n v6 = 0; /*0xffe32f25*/\n if ( !v6 ) /*0xffe32f2d*/\n {\n v4 = sub_FFE32DA5(); /*0xffe32f2f*/\n if ( v4 ) /*0xffe32f36*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe32f47*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiHobLib\\\\HobLib.c\",\n 250,\n \"Hob != ((void *) 0)\");\n }\n return v6; /*0xffe32f20*/\n}","refs":[{"addr":"0xffe330d1","name":"sub_FFE330D1"},{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33410","name":"aEHsMdepkgLibra","string":"e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c"},{"addr":"0xffe3346c","name":"aHobVoid0","string":"Hob != ((void *) 0)"}]}

{"addr":"0xffe32f54","code":"int __thiscall sub_FFE32F54(void *this)\n{\n int result; // eax\n int v2; // esi\n\n result = sub_FFE32F04(this, 40); /*0xffe32f58*/\n v2 = result; /*0xffe32f5d*/\n if ( result ) /*0xffe32f61*/\n {\n sub_FFE32FE1((void *)(result + 8)); /*0xffe32f68*/\n return v2 + 24; /*0xffe32f6d*/\n }\n return result; /*0xffe32f63*/\n}","refs":[{"addr":"0xffe32f04","name":"sub_FFE32F04"},{"addr":"0xffe32fe1","name":"sub_FFE32FE1"}]}

{"addr":"0xffe32f72","code":"char *sub_FFE32F72(char *dst, char *src, unsigned int n16)\n{\n int v5; // eax\n int v6; // eax\n\n if ( n16 - 1 > -1 - (int)dst ) /*0xffe32f88*/\n {\n v5 = sub_FFE32DA5(); /*0xffe32f8a*/\n if ( v5 ) /*0xffe32f91*/\n (*(void ( **)(const char *, int, const char *))(v5 + 4))( /*0xffe32f9f*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CopyMemWrapper.c\",\n 56,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)\");\n }\n if ( n16 - 1 > -1 - (int)src ) /*0xffe32fa9*/\n {\n v6 = sub_FFE32DA5(); /*0xffe32fab*/\n if ( v6 ) /*0xffe32fb2*/\n (*(void ( **)(const char *, int, const char *))(v6 + 4))( /*0xffe32fc0*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseMemoryLibRepStr\\\\CopyMemWrapper.c\",\n 57,\n \"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)\");\n }\n if ( dst == src ) /*0xffe32fc8*/\n return dst; /*0xffe32fca*/\n else\n return internal_memcpy(dst, src, n16); /*0xffe32fd4*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe334b8","name":"aEHsMdepkgLibra_0","string":"e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c"},{"addr":"0xffe33480","name":"aLength10xfffff","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"},{"addr":"0xffe334f4","name":"aLength10xfffff_0","string":"(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"},{"addr":"0xffe32900","name":"internal_memcpy"}]}

{"addr":"0xffe32fe1","code":"void *__thiscall sub_FFE32FE1(void *this)\n{\n __int64 v2; // rax\n __int64 v3; // rax\n\n v2 = sub_FFE33071(&unk_FFE337C0); /*0xffe32fe9*/\n sub_FFE3309D(v2, SHIDWORD(v2)); /*0xffe32ff2*/\n v3 = sub_FFE33071(&unk_FFE337C8); /*0xffe32ffc*/\n sub_FFE3309D(v3, SHIDWORD(v3)); /*0xffe33006*/\n return this; /*0xffe33010*/\n}","refs":[{"addr":"0xffe33071","name":"sub_FFE33071"},{"addr":"0xffe337c0","name":"unk_FFE337C0"},{"addr":"0xffe3309d","name":"sub_FFE3309D"},{"addr":"0xffe337c8","name":"unk_FFE337C8"}]}

{"addr":"0xffe33012","code":"bool sub_FFE33012(int i, 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_FFE33071((void *)i); /*0xffe3301d*/\n v12 = HIDWORD(v4); /*0xffe33024*/\n v5 = v4; /*0xffe33028*/\n v6 = sub_FFE33071((void *)a2); /*0xffe3302a*/\n v11 = HIDWORD(v6); /*0xffe33032*/\n v7 = v6; /*0xffe33036*/\n v8 = sub_FFE33071((void *)(i + 8)); /*0xffe33044*/\n v9 = sub_FFE33071((void *)(a2 + 8)); /*0xffe33046*/\n return v5 == v7 && v12 == v11 && v8 == v9; /*0xffe33069*/\n}","refs":[{"addr":"0xffe33071","name":"sub_FFE33071"}]}

{"addr":"0xffe33071","code":"__int64 __thiscall sub_FFE33071(void *this)\n{\n int v2; // eax\n\n if ( !this ) /*0xffe33076*/\n {\n v2 = sub_FFE32DA5(); /*0xffe33078*/\n if ( v2 ) /*0xffe3307f*/\n (*(void ( **)(const char *, int, const char *))(v2 + 4))( /*0xffe33090*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 192,\n \"Buffer != ((void *) 0)\");\n }\n return *(_QWORD *)this; /*0xffe3309b*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33528","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c"},{"addr":"0xffe333f8","name":"aBufferVoid0","string":"Buffer != ((void *) 0)"}]}

{"addr":"0xffe3309d","code":"int sub_FFE3309D(int a1, int a2)\n{\n _DWORD *v2; // ecx\n _DWORD *v3; // esi\n int v4; // eax\n\n v3 = v2; /*0xffe3309e*/\n if ( !v2 ) /*0xffe330a2*/\n {\n v4 = sub_FFE32DA5(); /*0xffe330a4*/\n if ( v4 ) /*0xffe330ab*/\n (*(void ( **)(const char *, int, const char *))(v4 + 4))( /*0xffe330bc*/\n \"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\Unaligned.c\",\n 219,\n \"Buffer != ((void *) 0)\");\n }\n *v3 = a1; /*0xffe330ca*/\n v3[1] = a2; /*0xffe330cc*/\n return a1; /*0xffe330cf*/\n}","refs":[{"addr":"0xffe32da5","name":"sub_FFE32DA5"},{"addr":"0xffe33528","name":"aEHsMdepkgLibra_1","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c"},{"addr":"0xffe333f8","name":"aBufferVoid0","string":"Buffer != ((void *) 0)"}]}

{"addr":"0xffe330d1","code":"int sub_FFE330D1()\n{\n int v0; // esi\n _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF\n int v3; // [esp+6h] [ebp-6h]\n\n sub_FFE33152(v2); /*0xffe330da*/\n v0 = *(_DWORD *)(v3 - 4); /*0xffe330e2*/\n if ( !v0 ) /*0xffe330e7*/\n sub_FFE32E00( /*0xffe330f6*/\n (int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\PeiServicesTablePointerLibIdt\\\\PeiServicesTablePointer.c\",\n 48,\n (int)\"PeiServices != ((void *) 0)\");\n return v0; /*0xffe330fe*/\n}","refs":[{"addr":"0xffe33152","name":"sub_FFE33152"},{"addr":"0xffe32e00","name":"sub_FFE32E00"},{"addr":"0xffe33570","name":"aEHsMdepkgLibra_2","string":"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c"},{"addr":"0xffe33554","name":"aPeiservicesVoi","string":"PeiServices != ((void *) 0)"}]}

{"addr":"0xffe33103","code":"int sub_FFE33103()\n{\n unsigned __int8 v0; // al\n char n3; // al\n char n3_1; // cl\n\n v0 = __inbyte(0x70u); /*0xffe33109*/\n __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe3310e*/\n n3 = __inbyte(0x71u); /*0xffe33115*/\n n3_1 = n3; /*0xffe33116*/\n if ( (unsigned __int8)n3 <= 3u ) /*0xffe3311b*/\n {\nLABEL_4:\n if ( !n3_1 ) /*0xffe33136*/\n return 0; /*0xffe33136*/\n goto LABEL_5; /*0xffe33136*/\n }\n n3_1 = n3; /*0xffe3311d*/\n if ( !n3 ) /*0xffe33125*/\n {\n n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe33131*/\n goto LABEL_4; /*0xffe33131*/\n }\nLABEL_5:\n if ( n3_1 != -1 )\n return n3_1 != 1 ? -2147483578 : -2147483644;\n return 0; /*0xffe3314e*/\n}","refs":[{"addr":"0xffe337e0","name":"n3"}]}

{"addr":"0xffe33152","code":"void *__thiscall sub_FFE33152(void *this)\n{\n void *this_1; // eax\n\n if ( !this ) /*0xffe33158*/\n sub_FFE32E00((int)\"e:\\\\hs\\\\MdePkg\\\\Library\\\\BaseLib\\\\X86ReadIdtr.c\", 37, (int)\"Idtr != ((void *) 0)\"); /*0xffe33167*/\n this_1 = this; /*0xffe3316d*/\n __sidt(this); /*0xffe33170*/\n return this_1; /*0xffe33174*/\n}","refs":[{"addr":"0xffe32e00","name":"sub_FFE32E00"},{"addr":"0xffe335d8","name":"aEHsMdepkgLibra_3","string":"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c"},{"addr":"0xffe335c0","name":"aIdtrVoid0","string":"Idtr != ((void *) 0)"}]}