// 0xffe6427c sub_FFE6427C void *__cdecl sub_FFE6427C(void *buf, unsigned int count, char value) { memset(buf, value, count); /*0xffe64289*/ return buf; /*0xffe6428f*/ } // 0xffe642bc sub_FFE642BC char *__cdecl sub_FFE642BC(char *dst, char *src, unsigned int count_1) { unsigned int count; // edx char *dst_1; // edi char *src_1; // esi count = count_1; /*0xffe642c6*/ if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffe642d4*/ { src_1 = &src[count_1 - 1]; /*0xffe642e8*/ dst_1 = &dst[count_1 - 1]; /*0xffe642ea*/ } else { count = count_1 & 3; /*0xffe642d8*/ qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffe642e1*/ src_1 = &src[4 * (count_1 >> 2)]; /*0xffe642e1*/ dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffe642e1*/ } qmemcpy(dst_1, src_1, count); /*0xffe642f1*/ return dst; /*0xffe642f8*/ } // 0xffe642fc sub_FFE642FC int __cdecl sub_FFE642FC(int a1, int a2, int a3, int a4) { do /*0xffe64315*/ { *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffe6430d*/ *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffe64311*/ } while ( a2 ); /*0xffe64315*/ return a1; /*0xffe64319*/ } // 0xffe6431c sub_FFE6431C void *__cdecl sub_FFE6431C(void *buf, unsigned int count, int value) { memset32(buf, value, count); /*0xffe64329*/ return buf; /*0xffe6432f*/ } // 0xffe6433c _ModuleEntryPoint EFI_STATUS ModuleEntryPoint(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { int v2; // eax int v3; // esi if ( *(char *)(sub_FFE663FA() + 1024068) >= 0 ) /*0xffe6434a*/ { sub_FFE66406(); /*0xffe6434c*/ sub_FFE662C6(); /*0xffe64351*/ } sub_FFE65B3E(-1, SystemTable, "CmosManagerPeiEntry Entry\n"); /*0xffe646c7*/ v2 = sub_FFE64BF8(SystemTable); /*0xffe646d1*/ v3 = v2; /*0xffe646d6*/ if ( v2 && (*(unsigned __int8 (__cdecl **)(int, int))(v2 + 170))(v2, 8) ) /*0xffe646e3*/ { if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 2) ) /*0xffe646f6*/ return 0; /*0xffe64704*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x80000) /*0xffe64729*/ && (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x20000) ) { if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 16) /*0xffe6474a*/ && (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x10000) ) { goto LABEL_21; /*0xffe64754*/ } (*(void (__cdecl **)(int, _DWORD))(v3 + 182))(v3, 0); /*0xffe64775*/ } if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 174))(v3, 4224) ) /*0xffe64783*/ { if ( !(*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 128) /*0xffe647b8*/ && !(*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 4096) ) { if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 0x80000) ) /*0xffe647d3*/ (*(int (__cdecl **)(int, int))(v3 + 170))(v3, 0x40000); /*0xffe647e5*/ } } else { (*(void (__cdecl **)(int))(v3 + 32))(v3); /*0xffe64830*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(v3 + 170))(v3, 1) ) /*0xffe64836*/ { (*(void (__cdecl **)(EFI_SYSTEM_TABLE *, void *))(LODWORD(SystemTable->Hdr.Signature) + 36))( /*0xffe64862*/ SystemTable, &unk_FFE66C40); return 0; /*0xffe64867*/ } } LABEL_21: JUMPOUT(0xFFE64550); /*0xffe64550*/ } return -2147483645; /*0xffe64859*/ } // 0xffe6486c sub_FFE6486C int __cdecl sub_FFE6486C(int a1) { int v1; // edi v1 = 0; /*0xffe64872*/ if ( a1 && (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 8) ) /*0xffe6487b*/ return a1; /*0xffe64887*/ return v1; /*0xffe6488b*/ } // 0xffe6488e sub_FFE6488E bool __cdecl sub_FFE6488E(int a1, int a2) { return (a2 & *(_DWORD *)(a1 + 158)) == a2; /*0xffe648a3*/ } // 0xffe648a4 sub_FFE648A4 bool __cdecl sub_FFE648A4(int a1, int a2) { return (a2 & *(_DWORD *)(a1 + 158)) != 0; /*0xffe648b5*/ } // 0xffe648b6 sub_FFE648B6 int __fastcall sub_FFE648B6(int a1, int n8, int a3) { __int16 n8_1; // bx int result; // eax int v6; // ecx n8_1 = n8; /*0xffe648bb*/ if ( a3 == 1 ) /*0xffe648c4*/ { *(_DWORD *)(a1 + 158) |= n8; /*0xffe648c6*/ result = (*(int (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000); /*0xffe648d2*/ if ( (_BYTE)result ) /*0xffe648dc*/ { if ( (n8_1 & 0x1000) != 0 ) /*0xffe648e4*/ result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4658, 1); /*0xffe648ed*/ if ( (n8_1 & 0x80u) != 0 ) /*0xffe648f5*/ result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4659, 1); /*0xffe648fe*/ if ( (n8_1 & 0x4000) != 0 ) /*0xffe6490a*/ result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4660, 1); /*0xffe64913*/ if ( (n8_1 & 0x10) != 0 ) /*0xffe6491c*/ result = (*(int (__cdecl **)(int, int, int))(a1 + 8))(a1, 4661, 1); /*0xffe64925*/ } } else { result = ~n8; /*0xffe6492f*/ *(_DWORD *)(a1 + 158) &= ~n8; /*0xffe64931*/ } if ( (n8_1 & 0x1080) != 0 ) /*0xffe6493d*/ result = sub_FFE6548C((_DWORD *)a1, n8_1, a3); /*0xffe64947*/ v6 = *(_DWORD *)(a1 + 178); /*0xffe6494d*/ if ( v6 ) /*0xffe64955*/ { result = *(_DWORD *)(a1 + 158); /*0xffe64957*/ *(_DWORD *)(v6 + 24) = result; /*0xffe6495d*/ } return result; /*0xffe64960*/ } // 0xffe64964 sub_FFE64964 int __cdecl sub_FFE64964(int a1, int n8) { return sub_FFE648B6(a1, n8, 1); /*0xffe64974*/ } // 0xffe64975 sub_FFE64975 int __cdecl sub_FFE64975(int a1, int a2) { return sub_FFE648B6(a1, a2, 0); /*0xffe64985*/ } // 0xffe64986 sub_FFE64986 int __cdecl sub_FFE64986(_DWORD *a1, char a2) { int v2; // ecx int v4; // [esp+0h] [ebp-4h] BYREF v4 = v2; /*0xffe64989*/ if ( (a2 & 0xC) == 0xC ) /*0xffe64992*/ return -2147483646; /*0xffe64999*/ if ( (a2 & 4) == 0 ) /*0xffe649ac*/ goto LABEL_8; /*0xffe649ac*/ if ( !(*(unsigned __int8 (__cdecl **)(_DWORD *, int))((char *)a1 + 170))(a1, 0x2000) ) /*0xffe649b0*/ { if ( !(*(unsigned __int8 (__cdecl **)(_DWORD *, int))((char *)a1 + 170))(a1, 64) ) /*0xffe649bf*/ { (*(void (__cdecl **)(_DWORD, int, int *))(*(_DWORD *)*a1 + 76))(*a1, 2 * *((unsigned __int16 *)a1 + 61), &v4); /*0xffe649db*/ sub_FFE664FC(v4, *(_DWORD *)((char *)a1 + 118), 2 * *((unsigned __int16 *)a1 + 61)); /*0xffe649eb*/ *(_DWORD *)((char *)a1 + 118) = v4; /*0xffe649f6*/ } (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 0x2000); /*0xffe649fc*/ (*(void (__cdecl **)(_DWORD *, _DWORD *))((char *)a1 + 142))(a1, a1 + 35); /*0xffe64a0a*/ (*(void (__cdecl **)(_DWORD *, _DWORD))((char *)a1 + 150))(a1, *((unsigned __int16 *)a1 + 70)); /*0xffe64a15*/ LABEL_8: if ( (a2 & 8) != 0 ) /*0xffe64a23*/ (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 166))(a1, 0x2000); /*0xffe64a27*/ } return 0; /*0xffe64a35*/ } // 0xffe64a37 sub_FFE64A37 int __cdecl sub_FFE64A37(int a1, unsigned int a2) { unsigned int v2; // edi unsigned int i; // ebx v2 = a2; /*0xffe64a3f*/ if ( !a2 ) /*0xffe64a44*/ v2 = (*(int (__cdecl **)(int))(a1 + 36))(a1); /*0xffe64a4b*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 174))(a1, 0x80000) ) /*0xffe64a53*/ return -2147483641; /*0xffe64a5f*/ for ( i = 0; i < 4; ++i ) /*0xffe64a67*/ { HIBYTE(a2) = v2 >> (8 * (3 - i)); /*0xffe64a79*/ sub_FFE64EE0(i + 66, 255, (char *)&a2 + 3); /*0xffe64a89*/ } return 0; /*0xffe64a9a*/ } // 0xffe64a9e sub_FFE64A9E int __cdecl sub_FFE64A9E(int a1, int *a2) { int v2; // esi unsigned __int8 i; // bl v2 = 0; /*0xffe64aa7*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 174))(a1, 0x80000) ) /*0xffe64aaf*/ return -2147483641; /*0xffe64abb*/ for ( i = 0; i < 4u; ++i ) /*0xffe64ac3*/ { sub_FFE64E08((unsigned __int16)(i + 66), (char *)&a1 + 3); /*0xffe64add*/ v2 = HIBYTE(a1) | (v2 << 8); /*0xffe64ae9*/ } *a2 = v2; /*0xffe64af8*/ return 0; /*0xffe64afc*/ } // 0xffe64b02 sub_FFE64B02 int __cdecl sub_FFE64B02(_DWORD *a1) { int v1; // edi v1 = (*(int (__cdecl **)(_DWORD, _DWORD *))(*(_DWORD *)*a1 + 24))(*a1, a1 + 18); /*0xffe64b14*/ if ( v1 < 0 ) /*0xffe64b1a*/ { (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 4); /*0xffe64b2c*/ (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 166))(a1, 1); /*0xffe64b35*/ } else { (*(void (__cdecl **)(_DWORD *, int))((char *)a1 + 162))(a1, 1); /*0xffe64b1f*/ } return v1; /*0xffe64b40*/ } // 0xffe64b43 sub_FFE64B43 int __fastcall sub_FFE64B43(int SystemTable, _DWORD *a2) { *a2 = SystemTable; /*0xffe64b46*/ a2[1] = sub_FFE651EB; /*0xffe64b48*/ a2[2] = sub_FFE656AB; /*0xffe64b4f*/ a2[3] = sub_FFE64DA7; /*0xffe64b56*/ a2[4] = sub_FFE65262; /*0xffe64b5d*/ a2[5] = sub_FFE65A44; /*0xffe64b64*/ a2[6] = sub_FFE65966; /*0xffe64b6b*/ a2[9] = sub_FFE6486C; /*0xffe64b72*/ a2[8] = sub_FFE64B02; /*0xffe64b79*/ *(_DWORD *)((char *)a2 + 142) = sub_FFE655C0; /*0xffe64b80*/ *(_DWORD *)((char *)a2 + 146) = sub_FFE653CF; /*0xffe64b8a*/ *(_DWORD *)((char *)a2 + 150) = sub_FFE653F9; /*0xffe64b94*/ a2[34] = sub_FFE64986; /*0xffe64b9e*/ *(_DWORD *)((char *)a2 + 170) = sub_FFE6488E; /*0xffe64ba8*/ *(_DWORD *)((char *)a2 + 174) = sub_FFE648A4; /*0xffe64bb2*/ *(_DWORD *)((char *)a2 + 162) = sub_FFE64964; /*0xffe64bbc*/ *(_DWORD *)((char *)a2 + 166) = sub_FFE64975; /*0xffe64bc6*/ *(_DWORD *)((char *)a2 + 154) = sub_FFE6572B; /*0xffe64bd0*/ *(_DWORD *)((char *)a2 + 182) = sub_FFE64A37; /*0xffe64bda*/ *(_DWORD *)((char *)a2 + 186) = sub_FFE64A9E; /*0xffe64be4*/ sub_FFE64964((int)a2, 8); /*0xffe64bee*/ return 0; /*0xffe64bf7*/ } // 0xffe64bf8 sub_FFE64BF8 _DWORD *__thiscall sub_FFE64BF8(EFI_SYSTEM_TABLE *SystemTable) { _DWORD *v3; // eax unsigned __int8 (__cdecl **v4)(_DWORD); // edi unsigned __int8 (__cdecl **v5)(_DWORD); // ebx unsigned __int8 (__cdecl **v6)(_DWORD); // esi unsigned __int8 (__cdecl **i)(_DWORD); // ebp _DWORD *v8; // [esp+8h] [ebp-4h] BYREF if ( (*(int (__cdecl **)(EFI_SYSTEM_TABLE *, void *, _DWORD, _DWORD, _DWORD **))(LODWORD(SystemTable->Hdr.Signature) /*0xffe64c0e*/ + 32))( SystemTable, &unk_FFE66BEC, 0, 0, &v8) ) { if ( (*(int (__cdecl **)(EFI_SYSTEM_TABLE *, int, _DWORD **))(LODWORD(SystemTable->Hdr.Signature) + 76))( /*0xffe64c47*/ SystemTable, 220, &v8) >= 0 ) { sub_FFE664A6(v8, 220, 0); /*0xffe64c57*/ sub_FFE64B43((int)SystemTable, v8); /*0xffe64c65*/ ((void (__thiscall *)(_DWORD *))loc_FFE645D2)(v8); /*0xffe64c6e*/ v3 = v8; /*0xffe64c73*/ v4 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 194); /*0xffe64c77*/ v5 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 198); /*0xffe64c7d*/ v6 = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 202); /*0xffe64c83*/ for ( i = *(unsigned __int8 (__cdecl ***)(_DWORD))((char *)v8 + 206); *i; ++i ) /*0xffe64c89*/ { if ( (*i)(*v3) ) /*0xffe64c98*/ (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x80000); /*0xffe64ca9*/ else (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 166))(v8, 0x80000); /*0xffe64cb1*/ v3 = v8; /*0xffe64cb7*/ } while ( *v4 ) /*0xffe64cc7*/ { if ( (*v4)(*v3) ) /*0xffe64ccb*/ (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 16); /*0xffe64cd9*/ v3 = v8; /*0xffe64ce1*/ ++v4; /*0xffe64ce5*/ } while ( *v5 ) /*0xffe64cee*/ { if ( (*v5)(*v3) ) /*0xffe64cf2*/ (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x10000); /*0xffe64d03*/ v3 = v8; /*0xffe64d0b*/ ++v5; /*0xffe64d0f*/ } while ( *v6 ) /*0xffe64d18*/ { if ( (*v6)(*v3) ) /*0xffe64d1c*/ (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 0x20000); /*0xffe64d2d*/ v3 = v8; /*0xffe64d35*/ ++v6; /*0xffe64d39*/ } (*(void (__cdecl **)(_DWORD *, int))((char *)v3 + 162))(v3, 0x40000); /*0xffe64d44*/ (*(void (__cdecl **)(_DWORD *, _DWORD *))((char *)v8 + 142))(v8, v8 + 35); /*0xffe64d56*/ sub_FFE65447(v8); /*0xffe64d63*/ return v8; /*0xffe64d68*/ } else { return 0; /*0xffe64c49*/ } } else { (*(void (__cdecl **)(_DWORD *, int))((char *)v8 + 162))(v8, 2); /*0xffe64c1f*/ return v8; /*0xffe64c25*/ } } // 0xffe64d71 sub_FFE64D71 unsigned __int16 __fastcall sub_FFE64D71(int a1, __int16 n0xE) { unsigned __int16 v2; // di unsigned __int16 v3; // si int v4; // ecx v2 = *(_WORD *)(a1 + 116); /*0xffe64d74*/ v3 = 1; /*0xffe64d7d*/ if ( v2 > 1u ) /*0xffe64d83*/ { v4 = *(_DWORD *)(a1 + 112); /*0xffe64d85*/ do /*0xffe64d95*/ { if ( *(_WORD *)(v4 + 2 * v3) == n0xE ) /*0xffe64d8f*/ break; /*0xffe64d8f*/ ++v3; /*0xffe64d91*/ } while ( v3 < v2 ); /*0xffe64d95*/ } if ( v3 >= v2 ) /*0xffe64d9a*/ return 0; /*0xffe64da1*/ else return v3; /*0xffe64d9c*/ } // 0xffe64da7 sub_FFE64DA7 int __cdecl sub_FFE64DA7(int a1, __int16 a2) { unsigned __int16 v2; // cx unsigned __int16 v3; // di int result; // eax v2 = 1; /*0xffe64daf*/ v3 = *(_WORD *)(a1 + 116); /*0xffe64db4*/ if ( v3 > 1u ) /*0xffe64db9*/ { do /*0xffe64dde*/ { if ( ((*(_WORD *)(*(_DWORD *)(a1 + 112) + 2 * v2) >> 3) & 0x1FF) == a2 ) /*0xffe64dd8*/ break; /*0xffe64dd8*/ ++v2; /*0xffe64dda*/ } while ( v2 < v3 ); /*0xffe64dde*/ } if ( v2 >= *(_WORD *)(a1 + 116) ) /*0xffe64de7*/ return 0; /*0xffe64de7*/ result = *(unsigned __int16 *)(*(_DWORD *)(a1 + 112) + 2 * v2); /*0xffe64df4*/ if ( (result & 0xF000) != 0x8000 ) /*0xffe64e03*/ return 0; /*0xffe64e05*/ return result; /*0xffe64de2*/ } // 0xffe64e08 sub_FFE64E08 int __fastcall sub_FFE64E08(int a1, int a2, int a3, unsigned __int8 *a4) { int v5; // esi unsigned __int8 v6; // bl unsigned __int16 v7; // bp int v8; // ecx int v9; // edx int v10; // eax int v11; // esi unsigned __int8 v12; // al v5 = -2147483634; /*0xffe64e15*/ v6 = 1; /*0xffe64e1b*/ v7 = *(_WORD *)(a1 + 218); /*0xffe64e1d*/ if ( v7 > 1u ) /*0xffe64e27*/ { v8 = *(_DWORD *)(a1 + 214); /*0xffe64e2d*/ v9 = a3; /*0xffe64e33*/ while ( 1 ) /*0xffe64e3a*/ { v10 = 12 * v6; /*0xffe64e3a*/ if ( (unsigned __int16)v9 >= *(_WORD *)(v10 + v8 + 4) && (unsigned __int16)v9 <= *(_WORD *)(v10 + v8 + 6) ) /*0xffe64e49*/ { if ( *(_DWORD *)(v10 + v8 + 8) ) /*0xffe64e4b*/ return (*(int (__cdecl **)(_DWORD, int, int, unsigned __int8 *))(12 * v6 + v8 + 8))(*(_DWORD *)a1, a2, v9, a4); /*0xffe64ecf*/ v7 = *(_WORD *)(a1 + 218); /*0xffe64e58*/ if ( *(_WORD *)(v10 + v8) ) /*0xffe64e54*/ { v9 = a3; /*0xffe64e68*/ if ( *(_WORD *)(v10 + v8 + 2) ) /*0xffe64e63*/ break; /*0xffe64e63*/ } } if ( ++v6 >= v7 ) /*0xffe64e76*/ return v5; /*0xffe64e76*/ } v11 = 12 * v6; /*0xffe64e7d*/ __outbyte(*(_WORD *)(v11 + v8), a3); /*0xffe64e88*/ if ( a2 == 1 ) /*0xffe64e8e*/ { v12 = __inbyte(*(_WORD *)(*(_DWORD *)(a1 + 214) + v11 + 2)); /*0xffe64e9b*/ *a4 = v12; /*0xffe64ea2*/ } else { __outbyte(*(_WORD *)(*(_DWORD *)(a1 + 214) + v11 + 2), *a4); /*0xffe64eb9*/ } return 0; /*0xffe64ed6*/ } return v5; /*0xffe64ed8*/ } // 0xffe64ee0 sub_FFE64EE0 int __fastcall sub_FFE64EE0(int a1, int a2, unsigned int n0xD, char n255, char *a5) { unsigned int v8; // [esp+8h] [ebp-Ch] BYREF int v9; // [esp+Ch] [ebp-8h] BYREF int v10; // [esp+10h] [ebp-4h] BYREF v8 = 0; /*0xffe64ee6*/ sub_FFE64E08(a1, 1, n0xD, (unsigned __int8 *)&v10); /*0xffe64efa*/ if ( a2 == 1 ) /*0xffe64f04*/ { *a5 = v10; /*0xffe64f0c*/ } else { LOBYTE(v9) = *a5 | v10 & ~n255; /*0xffe64f27*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe64f2a*/ sub_FFE65518(a1, n0xD, v10, v9, &v8); /*0xffe64f45*/ sub_FFE64E08(a1, 0, n0xD, (unsigned __int8 *)&v9); /*0xffe64f58*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) /*0xffe64f72*/ && (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 256) ) { (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe64f80*/ sub_FFE653F9(a1, v8); /*0xffe64f8a*/ (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe64f91*/ } } return 0; /*0xffe64f9a*/ } // 0xffe64fa2 sub_FFE64FA2 int __fastcall sub_FFE64FA2(int a1, int a2, unsigned __int16 i, char n255, _BYTE *a5) { int v6; // ebp char v7; // cl unsigned __int8 v8; // bl unsigned int v10; // [esp+8h] [ebp-8h] BYREF int v11; // [esp+Ch] [ebp-4h] v10 = 0; /*0xffe64fa4*/ if ( (unsigned __int16)(i - 64) > 0x31u ) { ((void (*)(int, const char *, ...))loc_FFE64550)(a1, " CmosBufferReadWrite: Invalid CmosAddress (0x%X)\n", i); return -2147483646; /*0xffe6507a*/ } else { v6 = (unsigned __int16)(i - 63); /*0xffe64fc7*/ v7 = *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6); /*0xffe64fc9*/ LOBYTE(v11) = *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6); /*0xffe64fd0*/ if ( a2 == 1 ) /*0xffe64fd7*/ { *a5 = v7; /*0xffe64fd9*/ } else { v8 = *a5 | v7 & ~n255; /*0xffe64fe9*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe64ff5*/ sub_FFE65518(a1, i, v11, v8, &v10); /*0xffe65012*/ *(_BYTE *)(*(_DWORD *)(a1 + 118) + 2 * v6) = v8; /*0xffe65024*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 1024) ) /*0xffe65027*/ { if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 256) ) /*0xffe6503a*/ { (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe65048*/ sub_FFE653F9(a1, v10); /*0xffe65053*/ (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe6505a*/ } } } return 0; /*0xffe65063*/ } } // 0xffe65084 sub_FFE65084 int __fastcall sub_FFE65084(int a1, int a2, unsigned int i, char n255, char *a5) { unsigned __int16 j_1; // dx unsigned __int16 j; // cx if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x2000) ) /*0xffe65091*/ return sub_FFE64EE0(a1, a2, i, n255, a5); /*0xffe65091*/ if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) /*0xffe650b9*/ || !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x8000) ) { return sub_FFE64FA2(a1, a2, i, n255, a5); /*0xffe650b9*/ } j_1 = *(_WORD *)(a1 + 128); /*0xffe650c5*/ for ( j = 1; j < j_1; ++j ) /*0xffe650d2*/ { if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * j) ) /*0xffe650df*/ break; /*0xffe650df*/ } if ( (_WORD)i == *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * j) ) /*0xffe650f2*/ return sub_FFE64EE0(a1, a2, i, n255, a5); /*0xffe65115*/ else return sub_FFE64FA2(a1, a2, i, n255, a5); /*0xffe65101*/ } // 0xffe65121 sub_FFE65121 int __fastcall sub_FFE65121(int a1, int a2, unsigned __int16 a3, char *va) { int v4; // ebp char n255; // [esp+10h] [ebp-Ch] v4 = *(_DWORD *)(a1 + 112); /*0xffe65126*/ n255 = 0; /*0xffe65138*/ if ( !a2 ) /*0xffe6514d*/ { if ( ((unsigned __int8)~(255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12))) & (unsigned __int8)*va) != 0 ) /*0xffe65165*/ return -2147483646; /*0xffe6516c*/ *va <<= *(_BYTE *)(v4 + 2 * a3) & 7; /*0xffe65177*/ n255 = (unsigned __int8)(255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12))) << (*(_BYTE *)(v4 + 2 * a3) & 7); /*0xffe65196*/ } sub_FFE65084(a1, a2, (*(_WORD *)(v4 + 2 * a3) >> 3) & 0x1FF, n255, va); /*0xffe651b8*/ if ( a2 == 1 ) /*0xffe651c5*/ { *va = (unsigned __int8)*va >> (*(_BYTE *)(v4 + 2 * a3) & 7); /*0xffe651ce*/ *va &= 255 >> (8 - (*(unsigned __int16 *)(v4 + 2 * a3) >> 12)); /*0xffe651df*/ } return 0; /*0xffe651e3*/ } // 0xffe651eb sub_FFE651EB int __cdecl sub_FFE651EB(int a1, int n0xE, unsigned __int8 *a3) { int v3; // ecx unsigned __int16 v5; // ax if ( (unsigned __int16)n0xE <= 0xEu ) /*0xffe651f7*/ { v3 = a1; /*0xffe651f9*/ return sub_FFE64E08(v3, 1, n0xE, a3); /*0xffe65232*/ } if ( (unsigned __int16)n0xE < 0x1000u ) /*0xffe65206*/ { if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe65211*/ return -2147483641; /*0xffe65222*/ v3 = a1; /*0xffe65224*/ return sub_FFE64E08(v3, 1, n0xE, a3); /*0xffe65224*/ } v5 = sub_FFE64D71(a1, n0xE); /*0xffe65239*/ if ( v5 ) /*0xffe65244*/ return sub_FFE65121(a1, 1, v5, (char *)a3); /*0xffe65250*/ else return -2147483646; /*0xffe65259*/ } // 0xffe65262 sub_FFE65262 int __cdecl sub_FFE65262(int a1, char *p_n0xD_1) { char *p_n0xD; // esi char *v4; // [esp-8h] [ebp-Ch] p_n0xD = p_n0xD_1; /*0xffe65266*/ if ( !p_n0xD_1 ) /*0xffe6526b*/ return -2147483646; /*0xffe6526d*/ v4 = p_n0xD_1 + 3; /*0xffe6527e*/ *p_n0xD_1 = 14; /*0xffe65281*/ p_n0xD[2] = 13; /*0xffe65289*/ sub_FFE64EE0(a1, 1, 0xDu, 0, v4); /*0xffe6528f*/ sub_FFE64EE0(a1, 1, (unsigned __int8)*p_n0xD, 0, p_n0xD + 1); /*0xffe652a3*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x2000) ) /*0xffe652ae*/ p_n0xD[4] |= 1u; /*0xffe652bb*/ else p_n0xD[4] &= ~1u; /*0xffe652c1*/ p_n0xD[4] &= 0xC3u; /*0xffe652c5*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe652cf*/ { p_n0xD[4] &= ~2u; /*0xffe652df*/ (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4658, (char *)&p_n0xD_1 + 3); /*0xffe652ed*/ p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (4 * HIBYTE(p_n0xD_1)))) & 4; /*0xffe6530c*/ (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4660, (char *)&p_n0xD_1 + 3); /*0xffe6530f*/ p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (16 * HIBYTE(p_n0xD_1)))) & 0x10; /*0xffe6532e*/ (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4661, (char *)&p_n0xD_1 + 3); /*0xffe65331*/ p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (32 * HIBYTE(p_n0xD_1)))) & 0x20; /*0xffe65350*/ (*(void (__cdecl **)(int, int, char *))(a1 + 4))(a1, 4659, (char *)&p_n0xD_1 + 3); /*0xffe65353*/ p_n0xD[4] ^= (p_n0xD[4] ^ (p_n0xD[4] | (8 * HIBYTE(p_n0xD_1)))) & 8; /*0xffe6536b*/ } else { p_n0xD[4] |= 2u; /*0xffe65370*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 4096) ) /*0xffe6537a*/ p_n0xD[4] |= 4u; /*0xffe65386*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x4000) ) /*0xffe65390*/ p_n0xD[4] |= 0x10u; /*0xffe6539c*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 16) ) /*0xffe653a3*/ p_n0xD[4] |= 0x20u; /*0xffe653af*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 128) ) /*0xffe653b9*/ p_n0xD[4] |= 8u; /*0xffe653c5*/ } return 0; /*0xffe653cc*/ } // 0xffe653cf sub_FFE653CF int __cdecl sub_FFE653CF(int a1, _WORD *a2) { (*(void (__cdecl **)(int, int, _WORD *))(a1 + 4))(a1, 33280, a2); /*0xffe653e0*/ *a2 <<= 8; /*0xffe653e3*/ (*(void (__cdecl **)(int, int, _WORD *))(a1 + 4))(a1, 33288, a2); /*0xffe653ee*/ return 0; /*0xffe653f6*/ } // 0xffe653f9 sub_FFE653F9 int __cdecl sub_FFE653F9(int a1, unsigned int a2) { int v2; // eax v2 = *(_DWORD *)(a1 + 178); /*0xffe65404*/ if ( v2 ) /*0xffe6540c*/ *(_WORD *)(v2 + 28) = a2; /*0xffe6540e*/ (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 1024); /*0xffe65419*/ (*(void (__cdecl **)(int, int, unsigned int))(a1 + 8))(a1, 33288, a2); /*0xffe65426*/ (*(void (__cdecl **)(int, int, unsigned int))(a1 + 8))(a1, 33280, a2 >> 8); /*0xffe65433*/ (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 1024); /*0xffe65438*/ return 0; /*0xffe65443*/ } // 0xffe65447 sub_FFE65447 int __thiscall sub_FFE65447(char *this) { int (__cdecl **v2)(_DWORD); // edi int (__cdecl *v3)(_DWORD); // eax char v4; // cl v2 = *(int (__cdecl ***)(_DWORD))(this + 210); /*0xffe6544b*/ v3 = *v2; /*0xffe65451*/ if ( !*v2 ) /*0xffe65451*/ goto LABEL_5; /*0xffe65451*/ do /*0xffe65461*/ { ++v2; /*0xffe6545c*/ v4 = v3(*(_DWORD *)this); /*0xffe6545f*/ v3 = *v2; /*0xffe65461*/ } while ( *v2 ); /*0xffe65461*/ if ( v4 ) /*0xffe65469*/ (*(void (__cdecl **)(char *, int))(this + 166))(this, 4096); /*0xffe65471*/ else LABEL_5: (*(void (__cdecl **)(char *, int))(this + 162))(this, 4096); /*0xffe6547f*/ return 0; /*0xffe65487*/ } // 0xffe6548c sub_FFE6548C int __fastcall sub_FFE6548C(_DWORD *a1, __int16 n8, int a3) { unsigned __int8 v6; // [esp+Bh] [ebp-1h] BYREF if ( (n8 & 0x80u) != 0 ) /*0xffe65498*/ { sub_FFE64E08((int)a1, 1, 14, &v6); /*0xffe654a3*/ if ( a3 == 1 ) /*0xffe654ae*/ { v6 |= 0x40u; /*0xffe654b0*/ } else if ( !*a1 ) /*0xffe654b6*/ { v6 &= ~0x40u; /*0xffe654bb*/ } sub_FFE64E08((int)a1, 0, 14, &v6); /*0xffe654c9*/ } if ( (n8 & 0x1000) != 0 ) /*0xffe654d6*/ { sub_FFE64E08((int)a1, 1, 14, &v6); /*0xffe654e3*/ if ( a3 == 1 ) /*0xffe654ee*/ { v6 |= 0x80u; /*0xffe654f0*/ } else if ( !*a1 ) /*0xffe654f6*/ { v6 &= ~0x80u; /*0xffe654fb*/ } sub_FFE64E08((int)a1, 0, 14, &v6); /*0xffe65509*/ } return 0; /*0xffe65510*/ } // 0xffe65518 sub_FFE65518 int __fastcall sub_FFE65518(int a1, unsigned __int16 n0xD, unsigned __int8 a3, unsigned __int8 a4, _WORD *a5) { unsigned __int16 v6; // si unsigned __int16 v7; // cx unsigned __int16 v8; // bx unsigned __int16 v9; // bx v6 = 1; /*0xffe65520*/ v7 = 1; /*0xffe65521*/ v8 = *(_WORD *)(a1 + 128); /*0xffe65523*/ if ( v8 > 1u ) /*0xffe6552d*/ { do /*0xffe65540*/ { if ( n0xD <= *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * v7) ) /*0xffe6553a*/ break; /*0xffe6553a*/ ++v7; /*0xffe6553c*/ } while ( v7 < v8 ); /*0xffe65540*/ } v9 = *(_WORD *)(a1 + 134); /*0xffe65542*/ if ( v9 > 1u ) /*0xffe6554c*/ { do /*0xffe65562*/ { if ( n0xD <= *(_WORD *)(*(_DWORD *)(a1 + 130) + 2 * v6) ) /*0xffe6555c*/ break; /*0xffe6555c*/ ++v6; /*0xffe6555e*/ } while ( v6 < v9 ); /*0xffe65562*/ } if ( n0xD == *(_WORD *)(*(_DWORD *)(a1 + 124) + 2 * v7) || n0xD == *(_WORD *)(*(_DWORD *)(a1 + 130) + 2 * v6) ) /*0xffe6557d*/ { (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 256); /*0xffe655b1*/ } else { sub_FFE653CF(a1, a5); /*0xffe65585*/ *a5 += a4 - a3; /*0xffe65597*/ (*(void (__cdecl **)(int, int))(a1 + 162))(a1, 256); /*0xffe655a0*/ } return 0; /*0xffe655b9*/ } // 0xffe655c0 sub_FFE655C0 int __cdecl sub_FFE655C0(int a1, _WORD *a2) { int v2; // esi unsigned __int16 j_1; // bx unsigned __int16 k_1; // bp unsigned int i; // edi unsigned __int16 j; // cx unsigned __int16 k; // cx __int16 v9; // [esp+10h] [ebp-4h] BYREF v2 = a1; /*0xffe655c8*/ j_1 = 1; /*0xffe655d0*/ k_1 = 1; /*0xffe655d1*/ *a2 = 0; /*0xffe655d5*/ for ( i = *(unsigned __int16 *)(v2 + 108); (unsigned __int16)i <= *(_WORD *)(v2 + 110); ++i ) /*0xffe655d8*/ { for ( j = *(_WORD *)(v2 + 134); j_1 < j; ++j_1 ) /*0xffe655e8*/ { if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(v2 + 130) + 2 * j_1) ) /*0xffe655f7*/ break; /*0xffe655f7*/ } if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v2 + 130) + 2 * j_1) ) /*0xffe6560c*/ { for ( k = *(_WORD *)(v2 + 128); k_1 < k; ++k_1 ) /*0xffe65618*/ { if ( (unsigned __int16)i <= *(_WORD *)(*(_DWORD *)(v2 + 124) + 2 * k_1) ) /*0xffe65624*/ break; /*0xffe65624*/ } if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v2 + 124) + 2 * k_1) ) /*0xffe65636*/ { sub_FFE65084(v2, 1, i, 0, (char *)&a1); /*0xffe65645*/ *a2 += (unsigned __int8)a1; /*0xffe65656*/ } } } sub_FFE653CF(v2, &v9); /*0xffe6566a*/ if ( *a2 == v9 ) /*0xffe65683*/ { (*(void (__cdecl **)(int, int))(v2 + 166))(v2, 128); /*0xffe6569b*/ } else { (*(void (__cdecl **)(int, int))(v2 + 162))(v2, 128); /*0xffe65685*/ ((void (__cdecl *)(int, const char *))loc_FFE64550)(v2, " ...CMOS_BAD_CHECKSUM\n"); /*0xffe65691*/ } return 0; /*0xffe656a3*/ } // 0xffe656ab sub_FFE656AB int sub_FFE656AB(int a1, int n0xE, ...) { int v2; // ecx unsigned __int16 v4; // ax va_list va; // [esp+18h] [ebp+10h] BYREF va_start(va, n0xE); if ( (unsigned __int16)n0xE <= 0xEu ) /*0xffe656b7*/ { v2 = a1; /*0xffe656b9*/ return sub_FFE64E08(v2, 0, n0xE, (unsigned __int8 *)va); /*0xffe656fb*/ } if ( (unsigned __int16)n0xE >= 0x1000u ) /*0xffe656c6*/ { v4 = sub_FFE64D71(a1, n0xE); /*0xffe65702*/ if ( v4 ) /*0xffe6570d*/ return sub_FFE65121(a1, 0, v4, (char *)va); /*0xffe65720*/ } else { if ( !(*(unsigned __int8 (__cdecl **)(int, int))(a1 + 170))(a1, 0x80000) ) /*0xffe656d1*/ return -2147483641; /*0xffe656e2*/ if ( (unsigned __int16)(n0xE - 64) > 0x3Fu ) /*0xffe656eb*/ { v2 = a1; /*0xffe656ed*/ return sub_FFE64E08(v2, 0, n0xE, (unsigned __int8 *)va); /*0xffe656ed*/ } } return -2147483646; /*0xffe65727*/ } // 0xffe6572b sub_FFE6572B int __cdecl sub_FFE6572B(int a1) { int v1; // esi unsigned __int16 v2; // bx int v3; // ebp int v4; // eax unsigned int i; // edi int v6; // edx unsigned __int16 v7; // cx int v8; // esi int v9; // edx unsigned __int16 v10; // dx int v11; // ecx int v12; // esi char v14; // [esp+13h] [ebp-15h] BYREF int v15; // [esp+14h] [ebp-14h] int v16; // [esp+18h] [ebp-10h] unsigned int v17; // [esp+1Ch] [ebp-Ch] BYREF int v18; // [esp+24h] [ebp-4h] v1 = a1; /*0xffe65731*/ v2 = 1; /*0xffe65737*/ v16 = 1; /*0xffe6573f*/ v15 = 1; /*0xffe65743*/ v3 = 0; /*0xffe65747*/ v4 = *(_DWORD *)(a1 + 158) & 0x2000; /*0xffe65751*/ v17 = 0; /*0xffe65753*/ v18 = v4; /*0xffe65758*/ (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 0x2000); /*0xffe6575c*/ (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 1024); /*0xffe65768*/ if ( (*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 16) ) /*0xffe65771*/ (*(void (__cdecl **)(int, int))(a1 + 166))(a1, 128); /*0xffe65784*/ i = *(unsigned __int16 *)(a1 + 108); /*0xffe6578c*/ if ( (unsigned __int16)i <= *(_WORD *)(a1 + 110) ) { v6 = v15; /*0xffe6579a*/ while ( (unsigned __int16)v6 < *(_WORD *)(v1 + 122) ) { v7 = *(_WORD *)(v1 + 134); /*0xffe657a8*/ if ( v2 < v7 ) /*0xffe657b2*/ { v8 = *(_DWORD *)(v1 + 130); /*0xffe657b4*/ do /*0xffe657c7*/ { if ( (unsigned __int16)i <= *(_WORD *)(v8 + 2 * v2) ) /*0xffe657c1*/ break; /*0xffe657c1*/ ++v2; /*0xffe657c3*/ } while ( v2 < v7 ); /*0xffe657c7*/ v1 = a1; /*0xffe657c9*/ } if ( (_WORD)i == *(_WORD *)(*(_DWORD *)(v1 + 130) + 2 * v2) ) { v9 = v6 + 0xFFFF; /*0xffe657dc*/ } else { if ( !(*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 32896) ) /*0xffe657ea*/ goto LABEL_32; /*0xffe657ea*/ v10 = *(_WORD *)(v1 + 128); /*0xffe657f6*/ v11 = v16; /*0xffe657fd*/ if ( (unsigned __int16)v16 < v10 ) /*0xffe65804*/ { v12 = *(_DWORD *)(v1 + 124); /*0xffe65806*/ do /*0xffe65816*/ { if ( (unsigned __int16)i <= *(_WORD *)(v12 + 2 * (unsigned __int16)v11) ) /*0xffe65810*/ break; /*0xffe65810*/ ++v11; /*0xffe65812*/ } while ( (unsigned __int16)v11 < v10 ); /*0xffe65816*/ v1 = a1; /*0xffe65818*/ v16 = v11; /*0xffe6581c*/ } if ( (_WORD)i != *(_WORD *)(*(_DWORD *)(v1 + 124) + 2 * (unsigned __int16)v11) ) { LABEL_32: v14 = *(_BYTE *)(*(_DWORD *)(v1 + 118) + 2 * (unsigned __int16)v15); /*0xffe6583d*/ v3 = sub_FFE65084(v1, 0, i, 255, &v14); /*0xffe65851*/ if ( v3 < 0 ) { ((void (*)(int, const char *, ...))loc_FFE64550)( v1, " Error: unable to write to register: 0x%X\n", (unsigned __int16)i); (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 512); /*0xffe65885*/ break; /*0xffe65885*/ } } v9 = v15; /*0xffe6585a*/ } ++i; /*0xffe6585e*/ v6 = v9 + 1; /*0xffe6585f*/ v15 = v6; /*0xffe65860*/ if ( (unsigned __int16)i > *(_WORD *)(v1 + 110) ) /*0xffe65868*/ break; /*0xffe65868*/ } if ( v3 < 0 ) /*0xffe65890*/ goto LABEL_28; /*0xffe65890*/ } if ( (*(unsigned __int8 (__cdecl **)(int, int))(v1 + 170))(v1, 512) ) { LABEL_28: ((void (__cdecl *)(int, const char *))loc_FFE64550)(v1, " Error: Could not load Optimal Defaults\n"); v3 = -2147483645; /*0xffe658d7*/ } else { sub_FFE655C0(v1, &v17); /*0xffe658aa*/ sub_FFE653F9(v1, v17); /*0xffe658b4*/ (*(void (__cdecl **)(int, int))(v1 + 166))(v1, 128); /*0xffe658bf*/ } *(_DWORD *)(v1 + 158) |= v18; /*0xffe658e0*/ (*(void (__cdecl **)(int, int))(v1 + 166))(v1, 1024); /*0xffe658ec*/ (*(void (__cdecl **)(int, int))(v1 + 162))(v1, 0x4000); /*0xffe658f8*/ return v3; /*0xffe65903*/ } // 0xffe6590b sub_FFE6590B char __fastcall sub_FFE6590B(int a1, unsigned __int8 a2) { unsigned __int8 v3; // [esp+1h] [ebp-1h] BYREF v3 = HIBYTE(a1); /*0xffe6590e*/ sub_FFE64E08(a1, 1, a2, &v3); /*0xffe6591a*/ return (v3 & 0xF) + 10 * (v3 >> 4); /*0xffe65936*/ } // 0xffe65938 sub_FFE65938 int __fastcall sub_FFE65938(int a1, unsigned __int8 a2, unsigned __int8 a3) { a3 = a3 % 0xAu + 16 * (a3 / 0xAu); /*0xffe6594f*/ return sub_FFE64E08(a1, 0, a2, &a3); /*0xffe65963*/ } // 0xffe65966 sub_FFE65966 int __cdecl sub_FFE65966(int a1, int a2) { int v2; // edi v2 = a2; /*0xffe6596b*/ if ( !a2 || !a1 ) /*0xffe6597b*/ return -2147483646; /*0xffe65a3b*/ sub_FFE64E08(a1, 1, 11, (unsigned __int8 *)&a2 + 3); /*0xffe6598d*/ HIBYTE(a2) |= 0x80u; /*0xffe65992*/ sub_FFE64E08(a1, 0, 11, (unsigned __int8 *)&a2 + 3); /*0xffe659a0*/ sub_FFE65938(a1, 0x32u, *(_WORD *)v2 / 0x64u); /*0xffe659b4*/ sub_FFE65938(a1, 9u, *(_WORD *)v2 % 0x64u); /*0xffe659c5*/ sub_FFE65938(a1, 8u, *(_BYTE *)(v2 + 2)); /*0xffe659d3*/ sub_FFE65938(a1, 7u, *(_BYTE *)(v2 + 3)); /*0xffe659e1*/ sub_FFE65938(a1, 4u, *(_BYTE *)(v2 + 4)); /*0xffe659ef*/ sub_FFE65938(a1, 2u, *(_BYTE *)(v2 + 5)); /*0xffe659fd*/ sub_FFE65938(a1, 0, *(_BYTE *)(v2 + 6)); /*0xffe65a0b*/ sub_FFE64E08(a1, 1, 11, (unsigned __int8 *)&a2 + 3); /*0xffe65a1b*/ HIBYTE(a2) &= ~0x80u; /*0xffe65a20*/ sub_FFE64E08(a1, 0, 11, (unsigned __int8 *)&a2 + 3); /*0xffe65a2e*/ return 0; /*0xffe65a40*/ } // 0xffe65a44 sub_FFE65A44 int __cdecl sub_FFE65A44(int a1, int a2) { __int16 v2; // si char v3; // al if ( !a2 || !a1 ) /*0xffe65a54*/ return -2147483646; /*0xffe65abd*/ v2 = 100 * (unsigned __int8)sub_FFE6590B(a1, 0x32u); /*0xffe65a67*/ *(_WORD *)a2 = v2 + (unsigned __int8)sub_FFE6590B(a1, 9u); /*0xffe65a79*/ *(_BYTE *)(a2 + 2) = sub_FFE6590B(a1, 8u); /*0xffe65a83*/ *(_BYTE *)(a2 + 3) = sub_FFE6590B(a1, 7u); /*0xffe65a8f*/ *(_BYTE *)(a2 + 4) = sub_FFE6590B(a1, 4u); /*0xffe65a9b*/ *(_BYTE *)(a2 + 5) = sub_FFE6590B(a1, 2u); /*0xffe65aa7*/ v3 = sub_FFE6590B(a1, 0); /*0xffe65aac*/ *(_DWORD *)(a2 + 8) = 0; /*0xffe65ab1*/ *(_BYTE *)(a2 + 6) = v3; /*0xffe65ab5*/ return 0; /*0xffe65ac2*/ } // 0xffe65ac5 sub_FFE65AC5 int sub_FFE65AC5() { int v0; // eax _BYTE v2[4]; // [esp+0h] [ebp-8h] BYREF int v3; // [esp+4h] [ebp-4h] BYREF v0 = sub_FFE663C8(); /*0xffe65aca*/ if ( (*(int (__cdecl **)(int, void *, _DWORD, _BYTE *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFE66BAC, 0, v2, &v3) >= 0 ) /*0xffe65ae9*/ return v3; /*0xffe65aef*/ else return 0; /*0xffe65aeb*/ } // 0xffe65af6 sub_FFE65AF6 int sub_FFE65AF6(int a1, int _nASSERT_EFI_ERROR_(Status___%r)_n, ...) { int result; // eax int (__cdecl **v3)(int, int, char *); // esi va_list va; // [esp+10h] [ebp+Ch] BYREF va_start(va, _nASSERT_EFI_ERROR_(Status___%r)_n); result = sub_FFE65AC5(); /*0xffe65af7*/ v3 = (int (__cdecl **)(int, int, char *))result; /*0xffe65afc*/ if ( result ) /*0xffe65b00*/ { result = sub_FFE6630C(); /*0xffe65b02*/ if ( (result & a1) != 0 ) /*0xffe65b0d*/ return (*v3)(a1, _nASSERT_EFI_ERROR_(Status___%r)_n, (char *)va); /*0xffe65b19*/ } return result; /*0xffe65b1e*/ } // 0xffe65b20 sub_FFE65B20 int __fastcall sub_FFE65B20( int e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, int n48, int PeiServices____((void__)_0)) { int result; // eax result = sub_FFE65AC5(); /*0xffe65b26*/ if ( result ) /*0xffe65b2d*/ return (*(int (__cdecl **)(int, int, int))(result + 4))( /*0xffe65b35*/ e:__hs__MdePkg__Library__PeiServicesTablePointerLibIdt__PeiServ, n48, PeiServices____((void__)_0)); return result; /*0xffe65b3b*/ } // 0xffe65b3e sub_FFE65B3E int sub_FFE65B3E(int a1, EFI_SYSTEM_TABLE *SystemTable, char *CmosManagerPeiEntry_Entry_n, ...) { int result; // eax char *CmosManagerPeiEntry_Entry_n_1; // eax va_list va; // [esp+18h] [ebp+14h] BYREF va_start(va, CmosManagerPeiEntry_Entry_n); result = (*(int (__stdcall **)(EFI_SYSTEM_TABLE *))(LODWORD(SystemTable->Hdr.Signature) + 32))(SystemTable); /*0xffe65b57*/ if ( result >= 0 ) /*0xffe65b5f*/ { if ( SystemTable ) /*0xffe65b67*/ { result = sub_FFE6630C(); /*0xffe65b69*/ if ( (result & a1) != 0 ) /*0xffe65b73*/ { CmosManagerPeiEntry_Entry_n_1 = CmosManagerPeiEntry_Entry_n; /*0xffe65b75*/ if ( *CmosManagerPeiEntry_Entry_n ) /*0xffe65b78*/ { do /*0xffe65b98*/ { if ( *CmosManagerPeiEntry_Entry_n_1 == 37 ) /*0xffe65b80*/ { if ( *++CmosManagerPeiEntry_Entry_n_1 == 115 ) /*0xffe65b88*/ { *CmosManagerPeiEntry_Entry_n_1 = 97; /*0xffe65b8a*/ } else if ( *CmosManagerPeiEntry_Entry_n_1 == 71 ) /*0xffe65b92*/ { *CmosManagerPeiEntry_Entry_n_1 = 103; /*0xffe65b94*/ } } ++CmosManagerPeiEntry_Entry_n_1; /*0xffe65b97*/ } while ( *CmosManagerPeiEntry_Entry_n_1 ); /*0xffe65b98*/ CmosManagerPeiEntry_Entry_n_1 = CmosManagerPeiEntry_Entry_n; /*0xffe65b9d*/ } return ((int (__cdecl *)(int, char *, char *))LODWORD(SystemTable->Hdr.Signature))( /*0xffe65ba6*/ a1, CmosManagerPeiEntry_Entry_n_1, (char *)va); } } } return result; /*0xffe65bae*/ } // 0xffe65bb0 sub_FFE65BB0 int __fastcall sub_FFE65BB0(unsigned int _EDI, unsigned int *p_n0xA, int n0xA, int _EDX) { int n0xA_1; // eax int n64; // ecx n0xA_1 = n0xA; /*0xffe65bbf*/ _EDX = _EDX; /*0xffe65bc2*/ _EDI = 0; /*0xffe65bc8*/ n64 = 64; /*0xffe65bca*/ do { __asm /*0xffe65bd1*/ { rcl edx, 1 rcl edi, 1 } n0xA_1 = 2 * n0xA_1 + (_EDI >= _EDI); /*0xffe65bda*/ _EDI = _EDI - (_EDI >= _EDI ? _EDI : 0); --n64; /*0xffe65be0*/ } while ( n64 ); if ( p_n0xA ) /*0xffe65bf3*/ *p_n0xA = _EDI; /*0xffe65bf8*/ return n0xA_1; /*0xffe65bee*/ } // 0xffe65c04 sub_FFE65C04 _BYTE *__fastcall sub_FFE65C04(_BYTE *a1, unsigned int n10, __int64 n0xA, char a4) { int v4; // ebx int _EDX; // edx int n0xA_1; // ecx char v9; // al v4 = HIDWORD(n0xA); /*0xffe65c05*/ if ( n0xA >= 0 ) /*0xffe65c16*/ goto LABEL_2; /*0xffe65c16*/ if ( n10 == 10 ) /*0xffe65c25*/ { n0xA_1 = -(int)n0xA; /*0xffe65c2b*/ _EDX = (unsigned __int64)-n0xA >> 32; /*0xffe65c30*/ goto LABEL_8; /*0xffe65c32*/ } if ( a4 ) /*0xffe65c39*/ LABEL_2: _EDX = HIDWORD(n0xA); /*0xffe65c1e*/ else _EDX = 0; /*0xffe65c3b*/ n0xA_1 = n0xA; /*0xffe65c3d*/ LABEL_8: if ( __PAIR64__(n0xA_1, _EDX) ) /*0xffe65c43*/ { do /*0xffe65c6c*/ { n0xA_1 = sub_FFE65BB0(n10, (unsigned int *)&n0xA, n0xA_1, _EDX); /*0xffe65c54*/ if ( (unsigned int)n0xA >= 0xA ) /*0xffe65c5d*/ v9 = n0xA + 87; /*0xffe65c63*/ else v9 = n0xA + 48; /*0xffe65c5f*/ *a1++ = v9; /*0xffe65c65*/ } while ( __PAIR64__(n0xA_1, _EDX) ); /*0xffe65c6c*/ } else { *a1++ = 48; /*0xffe65c70*/ } if ( n10 == 10 && v4 < 0 ) /*0xffe65c7b*/ *a1++ = 45; /*0xffe65c83*/ *a1 = 0; /*0xffe65c88*/ return a1 - 1; /*0xffe65c87*/ } // 0xffe65c92 sub_FFE65C92 char *__fastcall sub_FFE65C92(char *a1, unsigned int n10, __int64 n0xA, char a4) { char *v5; // esi char *v6; // eax char v7; // dl v5 = a1; /*0xffe65c9e*/ v6 = sub_FFE65C04(a1, n10, n0xA, a4); /*0xffe65ca4*/ if ( a1 < v6 ) /*0xffe65cae*/ { do /*0xffe65cbc*/ { v7 = *v5; /*0xffe65cb2*/ *v5++ = *v6; /*0xffe65cb4*/ *v6-- = v7; /*0xffe65cb7*/ } while ( v5 < v6 ); /*0xffe65cbc*/ } return a1; /*0xffe65cc0*/ } // 0xffe65cc3 sub_FFE65CC3 int __fastcall sub_FFE65CC3(char *a1, char **a2) { char v2; // bl unsigned int n0x7FFFFFFF; // esi char n57; // al char n10; // al char v7; // [esp+Ch] [ebp-4h] v2 = 1; /*0xffe65cc9*/ v7 = 0; /*0xffe65ccd*/ n0x7FFFFFFF = 0; /*0xffe65cd1*/ while ( *a1 == 32 || *a1 == 9 ) /*0xffe65cdb*/ ++a1; /*0xffe65cdd*/ if ( !*a1 ) /*0xffe65ce0*/ { *a2 = a1; /*0xffe65ce6*/ return 0; /*0xffe65cea*/ } if ( *a1 == 45 ) /*0xffe65cee*/ { v2 = -1; /*0xffe65cf0*/ ++a1; /*0xffe65cf3*/ } if ( *a1 == 43 ) /*0xffe65cf7*/ ++a1; /*0xffe65cf9*/ while ( 1 ) /*0xffe65d00*/ { n57 = *a1; /*0xffe65d00*/ if ( *a1 >= 48 && n57 <= 57 ) /*0xffe65d08*/ { n10 = n57 - 48; /*0xffe65d0a*/ goto LABEL_17; /*0xffe65d0c*/ } if ( (n57 & 0xDFu) < 0x41 || (n57 & 0xDFu) > 0x5A ) /*0xffe65d1b*/ break; /*0xffe65d1b*/ n10 = (n57 & 0xDF) - 55; /*0xffe65d1f*/ LABEL_17: if ( n10 >= 10 ) /*0xffe65d27*/ break; /*0xffe65d27*/ n0x7FFFFFFF = n10 + 10 * n0x7FFFFFFF; /*0xffe65d2c*/ if ( v2 == 1 ) /*0xffe65d31*/ { if ( n0x7FFFFFFF < 0x80000000 ) /*0xffe65d35*/ goto LABEL_23; /*0xffe65d35*/ } else if ( n0x7FFFFFFF <= 0x80000000 ) /*0xffe65d3b*/ { goto LABEL_23; /*0xffe65d3b*/ } v7 = 1; /*0xffe65d3d*/ LABEL_23: ++a1; /*0xffe65d42*/ } *a2 = a1; /*0xffe65d45*/ if ( v7 ) /*0xffe65d4c*/ { n0x7FFFFFFF = 0x7FFFFFFF; /*0xffe65d4e*/ if ( v2 == -1 ) /*0xffe65d56*/ n0x7FFFFFFF = 0x80000000; /*0xffe65d58*/ } return n0x7FFFFFFF * v2; /*0xffe65d61*/ } // 0xffe65d66 sub_FFE65D66 char *__thiscall sub_FFE65D66(char *this) { char *i; // eax char n122; // dl for ( i = this; *i; ++i ) /*0xffe65d66*/ { n122 = *i; /*0xffe65d6d*/ if ( *i >= 97 && n122 <= 122 ) /*0xffe65d77*/ *i = n122 - 32; /*0xffe65d7c*/ } return this; /*0xffe65d86*/ } // 0xffe65d87 sub_FFE65D87 char *__fastcall sub_FFE65D87(int n2) { unsigned int n3; // edx if ( !n2 ) /*0xffe65d89*/ return "EFI_SUCCESS"; /*0xffe65d90*/ if ( n2 < 0 ) /*0xffe65d91*/ { n3 = n2 & 0x1FFFFFFF; /*0xffe65dc7*/ if ( (n2 & 0xA0000000) == 0xA0000000 ) /*0xffe65dd0*/ { if ( n3 >= 3 ) /*0xffe65dd5*/ return 0; /*0xffe65dd5*/ // "EFI_INTERRUPT_PENDING" return &aEfiInterruptPe[25 * n3]; /*0xffe65dda*/ } else if ( (n2 & 0xC0000000) == 0xC0000000 ) /*0xffe65de9*/ { if ( n3 > 2 ) /*0xffe65dee*/ return 0; /*0xffe65dee*/ // "ABLE_YET" return &aAbleYet[25 * n3]; /*0xffe65df3*/ } else { if ( n3 > 0x1E ) /*0xffe65dfd*/ return 0; /*0xffe65dfd*/ // "E_BOF" return &aEBof[25 * n3]; /*0xffe65e02*/ } } else if ( (n2 & 0x20000000) != 0 ) /*0xffe65d99*/ { if ( (unsigned int)n2 >= 2 ) /*0xffe65d9e*/ return 0; /*0xffe65da2*/ // "EFI_WARN_INTERRUPT_SOURCE_PENDING" return &aEfiWarnInterru[35 * n2]; /*0xffe65da6*/ } else { if ( (unsigned int)n2 > 4 ) /*0xffe65daf*/ return 0; /*0xffe65daf*/ // "... DEBUG BUFFER OVERFLOW!!!\n" return &aDebugBufferOve[26 * n2 + 6]; /*0xffe65db4*/ } } // 0xffe65e09 sub_FFE65E09 int __fastcall sub_FFE65E09(char *a1, int a2, char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, int va) { char *v4; // ebx int v5; // edi char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; // esi int *v7; // ecx int i_1; // edx char n37; // al char *v10; // esi int i_2; // edx int *v12; // ecx int m_2; // eax char n97; // ah char *k; // ecx unsigned __int8 *v16; // edi int v17; // ebx int v18; // esi int v19; // ecx int v20; // eax int v21; // eax const char *v22; // eax char n105; // ah unsigned int n10_1; // eax int *v25; // ecx unsigned int n10_3; // edx char v27; // dl unsigned int m; // eax char *v29; // ecx char *j; // eax int v32; // [esp-1Ch] [ebp-6Ch] int v33; // [esp-18h] [ebp-68h] int v34; // [esp-14h] [ebp-64h] int v35; // [esp-10h] [ebp-60h] int v36; // [esp-Ch] [ebp-5Ch] __int64 n0xA; // [esp-Ch] [ebp-5Ch] int v38; // [esp-8h] [ebp-58h] int v39; // [esp-4h] [ebp-54h] int n10; // [esp-4h] [ebp-54h] char v41; // [esp-4h] [ebp-54h] char v42; // [esp+Eh] [ebp-42h] char n32; // [esp+Fh] [ebp-41h] char *v44; // [esp+10h] [ebp-40h] int *v45; // [esp+14h] [ebp-3Ch] int i; // [esp+18h] [ebp-38h] int v47; // [esp+1Ch] [ebp-34h] int v49; // [esp+24h] [ebp-2Ch] unsigned int n10_2; // [esp+24h] [ebp-2Ch] unsigned int m_1; // [esp+28h] [ebp-28h] char *v52; // [esp+28h] [ebp-28h] int n2; // [esp+28h] [ebp-28h] char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2; // [esp+2Ch] [ebp-24h] BYREF char v55[32]; // [esp+30h] [ebp-20h] BYREF char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3; // [esp+58h] [ebp+8h] v4 = a1; /*0xffe65e1a*/ v44 = a1; /*0xffe65e1c*/ v5 = a2; /*0xffe65e21*/ v47 = a2; /*0xffe65e23*/ if ( !a1 ) /*0xffe65e29*/ return -1; /*0xffe65e29*/ %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x; /*0xffe65e2f*/ if ( !%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x ) /*0xffe65e34*/ return -1; /*0xffe66174*/ if ( a2 != 1 ) /*0xffe65e3f*/ { v7 = (int *)(va - 4); /*0xffe65e48*/ i_1 = va - 8; /*0xffe65e4b*/ v45 = (int *)(va - 4); /*0xffe65e4e*/ for ( i = va - 8; ; i_1 = i ) /*0xffe65e52*/ { n37 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65e56*/ if ( !*%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 ) /*0xffe65e5a*/ break; /*0xffe65e5a*/ if ( n37 != 37 ) /*0xffe65e62*/ { *v4++ = n37; /*0xffe65e64*/ ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65e67*/ LABEL_8: --v5; /*0xffe65e68*/ v44 = v4; /*0xffe65e69*/ v47 = v5; /*0xffe65e6d*/ goto LABEL_65; /*0xffe65e71*/ } v10 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 + 1; /*0xffe65e76*/ if ( *v10 == 37 ) /*0xffe65e7b*/ { %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1; /*0xffe65e7d*/ *v4++ = 37; /*0xffe65e7e*/ goto LABEL_8; /*0xffe65e81*/ } n32 = 32; /*0xffe65e83*/ if ( *v10 == 48 ) /*0xffe65e8a*/ { n32 = 48; /*0xffe65e8c*/ ++v10; /*0xffe65e90*/ } if ( *v10 == 42 ) /*0xffe65e94*/ { i_2 = i_1 + 4; /*0xffe65e96*/ %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = v10 + 1; /*0xffe65e99*/ v12 = v7 + 1; /*0xffe65e9a*/ i = i_2; /*0xffe65e9d*/ v45 = v12; /*0xffe65ea1*/ m_2 = *v12; /*0xffe65ea5*/ } else { m_2 = sub_FFE65CC3(v10, &%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2); /*0xffe65eb1*/ %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_2; /*0xffe65eb6*/ i_2 = i; /*0xffe65eba*/ v12 = v45; /*0xffe65ec0*/ } m_1 = m_2; /*0xffe65ec4*/ n97 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65ec8*/ %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65eca*/ if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 115 || n97 == 97 ) /*0xffe65ed9*/ { i = i_2 + 4; /*0xffe6612b*/ v45 = v12 + 1; /*0xffe6612f*/ for ( j = (char *)v12[1]; *j; ++j ) /*0xffe66133*/ { v47 = --v5; /*0xffe6613a*/ if ( !v5 ) /*0xffe6613e*/ goto LABEL_67; /*0xffe6613e*/ *v4++ = *j; /*0xffe66140*/ v44 = v4; /*0xffe66143*/ } goto LABEL_64; /*0xffe6614c*/ } if ( n97 == 83 ) /*0xffe65ee2*/ { i = i_2 + 4; /*0xffe65eea*/ v45 = v12 + 1; /*0xffe65ef0*/ for ( k = (char *)v12[1]; *(_WORD *)k; k += 2 ) /*0xffe65ef4*/ { v47 = --v5; /*0xffe65efb*/ if ( !v5 ) /*0xffe65eff*/ goto LABEL_69; /*0xffe65eff*/ *v4++ = *k; /*0xffe65f07*/ v44 = v4; /*0xffe65f0a*/ } ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe65f16*/ } else { if ( n97 == 99 ) /*0xffe65f1f*/ { i = i_2 + 4; /*0xffe65f27*/ v45 = v12 + 1; /*0xffe65f2b*/ *v4++ = *((_BYTE *)v12 + 4); /*0xffe65f31*/ v44 = v4; /*0xffe65f34*/ goto LABEL_64; /*0xffe65f38*/ } if ( (n97 & 0xDF) == 0x47 ) /*0xffe65f43*/ { v52 = v4; /*0xffe65f4c*/ v45 = v12 + 1; /*0xffe65f53*/ i = i_2 + 4; /*0xffe65f57*/ v16 = (unsigned __int8 *)v12[1]; /*0xffe65f5b*/ v17 = sub_FFE66382(v16); /*0xffe65f67*/ v18 = (unsigned __int16)sub_FFE6635B(v16 + 4); /*0xffe65f71*/ v19 = (unsigned __int16)sub_FFE6635B(v16 + 6); /*0xffe65f79*/ v39 = v16[15]; /*0xffe65f80*/ v38 = v16[14]; /*0xffe65f85*/ v36 = v16[13]; /*0xffe65f8a*/ v35 = v16[12]; /*0xffe65f8f*/ v34 = v16[11]; /*0xffe65f94*/ v33 = v16[10]; /*0xffe65f99*/ v32 = v16[9]; /*0xffe65f9e*/ v20 = v16[8]; /*0xffe65f9f*/ v5 = v47; /*0xffe65fa3*/ v21 = sub_FFE6617E( /*0xffe65fb6*/ v44, v47, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", v17, v18, v19, v20, v32, v33, v34, v35, v36, v38, v39); %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 = %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3; /*0xffe65fbb*/ v4 = &v44[v21]; /*0xffe65fbe*/ v49 = v21; /*0xffe65fc3*/ v44 += v21; /*0xffe65fc7*/ if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_3 == 71 ) /*0xffe65fce*/ { sub_FFE65D66(v52); /*0xffe65fd4*/ v21 = v49; /*0xffe65fd9*/ } LABEL_29: v5 -= v21; /*0xffe65fdd*/ v47 = v5; /*0xffe65fdf*/ goto LABEL_64; /*0xffe65fe3*/ } if ( n97 == 114 ) /*0xffe65feb*/ { v45 = v12 + 1; /*0xffe65ff3*/ i = i_2 + 4; /*0xffe65ff7*/ n2 = v12[1]; /*0xffe65fff*/ v22 = sub_FFE65D87(n2); /*0xffe66003*/ if ( v22 ) /*0xffe6600a*/ v21 = sub_FFE6617E(v4, v5, "%s", v22); /*0xffe6602e*/ else v21 = sub_FFE6617E( /*0xffe6601c*/ v4, v5, "%s(%X)", aStatusCode, // "Status Code" n2); v4 += v21; /*0xffe66036*/ v44 = v4; /*0xffe66038*/ goto LABEL_29; /*0xffe6603c*/ } if ( n97 == 108 ) /*0xffe66041*/ { ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe66043*/ v42 = 1; /*0xffe66044*/ } else { v42 = 0; /*0xffe6604b*/ } n105 = *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe66050*/ if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 100 || n105 == 105 ) /*0xffe6605a*/ { n10 = 10; /*0xffe66071*/ LABEL_44: n10_1 = n10; /*0xffe66073*/ n10_2 = n10; /*0xffe66079*/ if ( v42 ) /*0xffe6607d*/ { v25 = v12 + 2; /*0xffe66082*/ v41 = 1; /*0xffe66085*/ i = i_2 + 8; /*0xffe66087*/ n0xA = *(_QWORD *)(i_2 + 8); /*0xffe6608e*/ n10_3 = n10_1; /*0xffe66090*/ } else { v25 = v12 + 1; /*0xffe66097*/ i = i_2 + 4; /*0xffe6609a*/ v41 = 0; /*0xffe6609e*/ n0xA = *v25; /*0xffe660a8*/ n10_3 = n10_2; /*0xffe660a4*/ } v45 = v25; /*0xffe660a9*/ sub_FFE65C92(v55, n10_3, n0xA, v41); /*0xffe660b1*/ if ( *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 88 /*0xffe660c1*/ || *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1 == 112 ) { sub_FFE65D66(v55); /*0xffe660c7*/ } v27 = v55[0]; /*0xffe660cc*/ for ( m = 0; v55[m]; ++m ) /*0xffe660d4*/ ; /*0xffe660d6*/ if ( m < m_1 ) /*0xffe660e4*/ { while ( 1 ) /*0xffe660ea*/ { ++m; /*0xffe660ea*/ v47 = --v5; /*0xffe660ee*/ if ( !v5 ) /*0xffe660f2*/ goto LABEL_67; /*0xffe660f2*/ *v4++ = n32; /*0xffe660f4*/ v44 = v4; /*0xffe660f7*/ if ( m >= m_1 ) /*0xffe660fd*/ { v27 = v55[0]; /*0xffe660ff*/ break; /*0xffe660ff*/ } } } v29 = v55; /*0xffe66103*/ if ( v27 ) /*0xffe66109*/ { while ( 1 ) /*0xffe6610b*/ { v47 = --v5; /*0xffe6610e*/ if ( !v5 ) /*0xffe66112*/ break; /*0xffe66112*/ *v4++ = *v29++; /*0xffe66116*/ v44 = v4; /*0xffe6611a*/ if ( !*v29 ) /*0xffe6611e*/ goto LABEL_64; /*0xffe66121*/ } LABEL_67: *v4 = 0; /*0xffe66163*/ return v4 - a1; /*0xffe66163*/ } LABEL_64: ++%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x_1; /*0xffe6614e*/ goto LABEL_65; /*0xffe6614e*/ } if ( (n105 & 0xDF) == 0x58 || n105 == 112 ) /*0xffe66067*/ { n10 = 16; /*0xffe6606d*/ goto LABEL_44; /*0xffe6606f*/ } } LABEL_65: if ( v5 == 1 ) /*0xffe66154*/ break; /*0xffe66154*/ v7 = v45; /*0xffe66156*/ } } LABEL_69: *v4 = 0; /*0xffe66170*/ return v4 - a1; /*0xffe66177*/ } // 0xffe6617e sub_FFE6617E int sub_FFE6617E(char *a1, int a2, char *%08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, ...) { va_list va; // [esp+10h] [ebp+10h] BYREF va_start(va, %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x); return sub_FFE65E09(a1, a2, %08x_%04x_%04x_%02x%02x_%02x%02x%02x%02x%02x%02x, (int)va); /*0xffe66196*/ } // 0xffe66197 sub_FFE66197 int __cdecl sub_FFE66197(int a1, int a2, unsigned __int16 n0x7F, unsigned __int8 *a4) { char v5; // al unsigned __int8 v6; // al if ( n0x7F > 0x7Fu ) /*0xffe661a2*/ return -2147483646; /*0xffe661a4*/ if ( n0x7F <= 9u && a2 == 1 ) /*0xffe661bd*/ { do /*0xffe661cb*/ { __outbyte(0x70u, 0x8Au); /*0xffe661c4*/ v5 = __inbyte(0x71u); /*0xffe661c8*/ } while ( v5 < 0 ); /*0xffe661cb*/ } __outbyte(0x70u, n0x7F | 0x80); /*0xffe661d5*/ if ( a2 == 1 ) /*0xffe661da*/ { v6 = __inbyte(0x71u); /*0xffe661df*/ *a4 = v6; /*0xffe661e3*/ } else { __outbyte(0x71u, *a4); /*0xffe661ef*/ } return 0; /*0xffe661a9*/ } // 0xffe661f6 sub_FFE661F6 int sub_FFE661F6() { unsigned __int8 v0; // al __outbyte(0x70u, 0x8Du); /*0xffe661fe*/ v0 = __inbyte(0x71u); /*0xffe66205*/ return v0 >> 7; /*0xffe6620c*/ } // 0xffe6620d sub_FFE6620D char __cdecl sub_FFE6620D(int a1) { char v1; // bl _DWORD v3[4]; // [esp+4h] [ebp-18h] BYREF int n4; // [esp+14h] [ebp-8h] BYREF int (__cdecl **v5)(_DWORD, const __int16 *, _DWORD *, _DWORD, int *, int *); // [esp+18h] [ebp-4h] BYREF v1 = 0; /*0xffe66217*/ n4 = 4; /*0xffe66219*/ v3[0] = 20351105; /*0xffe66220*/ v3[1] = 1260242093; /*0xffe66227*/ v3[2] = 2060792246; /*0xffe6622e*/ v3[3] = 1809565838; /*0xffe66235*/ v5 = 0; /*0xffe6623c*/ if ( a1 /*0xffe66278*/ && ((*(int (__cdecl **)(int, void *, _DWORD, _DWORD, int (__cdecl ***)(_DWORD, const __int16 *, _DWORD *, _DWORD, int *, int *)))(*(_DWORD *)a1 + 32))( a1, &unk_FFE66B9C, 0, 0, &v5) < 0 || (*v5)(v5, L"MonotonicCounter", v3, 0, &n4, &a1) < 0) ) { return 1; /*0xffe6627a*/ } return v1; /*0xffe6627e*/ } // 0xffe66283 sub_FFE66283 char sub_FFE66283() { return 1; /*0xffe66285*/ } // 0xffe66286 sub_FFE66286 int __cdecl sub_FFE66286(int a1, int a2, __int16 a3, unsigned __int8 *a4) { unsigned __int8 v4; // al if ( (unsigned __int16)(a3 - 128) > 0x7Fu ) /*0xffe66291*/ return -2147483646; /*0xffe662c0*/ __outbyte(0x72u, a3); /*0xffe66299*/ if ( a2 == 1 ) /*0xffe6629f*/ { v4 = __inbyte(0x73u); /*0xffe662a7*/ *a4 = v4; /*0xffe662ac*/ } else { __outbyte(0x73u, *a4); /*0xffe662bc*/ } return 0; /*0xffe662bf*/ } // 0xffe662c6 sub_FFE662C6 char sub_FFE662C6() { int v0; // ecx char result; // al v0 = sub_FFE663FA(); /*0xffe662cb*/ result = *(_BYTE *)(v0 + 1024068) | 0x80; /*0xffe662d3*/ *(_BYTE *)(v0 + 1024068) = result; /*0xffe662d5*/ return result; /*0xffe662db*/ } // 0xffe6630c sub_FFE6630C int sub_FFE6630C() { unsigned __int8 v0; // al char n3; // al char n3_1; // cl v0 = __inbyte(0x70u); /*0xffe66312*/ __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffe66317*/ n3 = __inbyte(0x71u); /*0xffe6631e*/ n3_1 = n3; /*0xffe6631f*/ if ( (unsigned __int8)n3 <= 3u ) /*0xffe66324*/ { LABEL_4: if ( !n3_1 ) /*0xffe6633f*/ return 0; /*0xffe6633f*/ goto LABEL_5; /*0xffe6633f*/ } n3_1 = n3; /*0xffe66326*/ if ( !n3 ) /*0xffe6632e*/ { n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffe6633a*/ goto LABEL_4; /*0xffe6633a*/ } LABEL_5: if ( n3_1 != -1 ) return n3_1 != 1 ? -2147483578 : -2147483644; return 0; /*0xffe66357*/ } // 0xffe6635b sub_FFE6635B __int16 __thiscall sub_FFE6635B(void *this) { int v2; // eax if ( !this ) /*0xffe66360*/ { v2 = sub_FFE65AC5(); /*0xffe66362*/ if ( v2 ) /*0xffe66369*/ (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffe66377*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 38, "Buffer != ((void *) 0)"); } return *(_WORD *)this; /*0xffe66380*/ } // 0xffe66382 sub_FFE66382 int __thiscall sub_FFE66382(void *this) { int v2; // eax if ( !this ) /*0xffe66387*/ { v2 = sub_FFE65AC5(); /*0xffe66389*/ if ( v2 ) /*0xffe66390*/ (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffe663a1*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 141, "Buffer != ((void *) 0)"); } return *(_DWORD *)this; /*0xffe663a9*/ } // 0xffe663c8 sub_FFE663C8 int sub_FFE663C8() { int v0; // esi _BYTE v2[2]; // [esp+4h] [ebp-8h] BYREF int v3; // [esp+6h] [ebp-6h] sub_FFE66417(v2); /*0xffe663d1*/ v0 = *(_DWORD *)(v3 - 4); /*0xffe663d9*/ if ( !v0 ) /*0xffe663de*/ sub_FFE65B20( /*0xffe663ed*/ (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", 48, (int)"PeiServices != ((void *) 0)"); return v0; /*0xffe663f5*/ } // 0xffe663fa sub_FFE663FA int sub_FFE663FA() { int v0; // eax v0 = sub_FFE6643A(); /*0xffe663fa*/ return (*(int (__cdecl **)(int))(v0 + 16))(5); /*0xffe66405*/ } // 0xffe66406 sub_FFE66406 int sub_FFE66406() { int v0; // ebx int v1; // eax v0 = sub_FFE663FA() + 1024064; /*0xffe662dd*/ if ( (v0 & 1) != 0 ) /*0xffe662e2*/ { v1 = sub_FFE65AC5(); /*0xffe662e4*/ if ( v1 ) /*0xffe662eb*/ (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffe662fc*/ "e:\\hs\\MdePkg\\Library\\BaseIoLibIntrinsic\\IoLib.c", 183, "(Address & 1) == 0"); } *(_WORD *)v0 = 1280; /*0xffe66307*/ return 1280; /*0xffe6630b*/ } // 0xffe66417 sub_FFE66417 void *__thiscall sub_FFE66417(void *this) { void *this_1; // eax if ( !this ) /*0xffe6641d*/ sub_FFE65B20((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, (int)"Idtr != ((void *) 0)"); /*0xffe6642c*/ this_1 = this; /*0xffe66432*/ __sidt(this); /*0xffe66435*/ return this_1; /*0xffe66439*/ } // 0xffe6643a sub_FFE6643A void *__thiscall sub_FFE6643A(void *this) { int v1; // eax int v2; // eax int v3; // eax void *this_1; // [esp+0h] [ebp-4h] this_1 = this; /*0xffe6643d*/ v1 = sub_FFE663C8(); /*0xffe6643e*/ v2 = (*(int (__stdcall **)(int))(*(_DWORD *)v1 + 32))(v1); /*0xffe66453*/ if ( v2 < 0 ) /*0xffe6645b*/ { sub_FFE65AF6(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v2); /*0xffe66468*/ v3 = sub_FFE65AC5(); /*0xffe66470*/ if ( v3 ) /*0xffe66477*/ (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffe66485*/ "e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c", 49, "!EFI_ERROR (Status)"); } return this_1; /*0xffe66490*/ } // 0xffe664a6 sub_FFE664A6 char *__usercall sub_FFE664A6@(int value_2@, char *buf, unsigned int n220, char a4) { unsigned int n220_1; // ecx char *buf_1; // edi __int16 value; // bx int value_1; // eax int v8; // edx char n220_2; // dl unsigned int count; // ecx n220_1 = n220; /*0xffe664a6*/ LOBYTE(value_2) = a4; /*0xffe664aa*/ buf_1 = buf; /*0xffe664af*/ BYTE1(value_2) = a4; /*0xffe664b8*/ value = value_2; /*0xffe664ba*/ value_1 = value_2 << 16; /*0xffe664bd*/ LOWORD(value_1) = value; /*0xffe664c0*/ if ( n220 >= 4 ) /*0xffe664c6*/ { v8 = (unsigned __int8)buf & 3; /*0xffe664ca*/ if ( ((unsigned __int8)buf & 3) != 0 ) /*0xffe664cd*/ { memset(buf, value, 4 - v8); /*0xffe664d8*/ buf_1 = &buf[4 - v8]; /*0xffe664d8*/ n220_1 = n220 - (4 - v8); /*0xffe664da*/ } n220_2 = n220_1; /*0xffe664dc*/ count = n220_1 >> 2; /*0xffe664de*/ memset32(buf_1, value_1, count); /*0xffe664e1*/ buf_1 += 4 * count; /*0xffe664e1*/ n220_1 = n220_2 & 3; /*0xffe664e6*/ } memset(buf_1, value, n220_1); /*0xffe664e8*/ return buf; /*0xffe664ec*/ } // 0xffe664fc sub_FFE664FC unsigned int __cdecl sub_FFE664FC(unsigned int dst_1, char *src_1, unsigned int n4) { char *src; // esi char *dst; // edi unsigned int count_2; // ecx char v10; // dl unsigned int n4_1; // eax unsigned int count; // eax int count_1; // ebx char count_3; // al unsigned int v15; // ecx int count_4; // eax __asm { pushfw } /*0xffe66502*/ src = src_1; /*0xffe66507*/ dst = (char *)dst_1; /*0xffe6650a*/ count_2 = n4; /*0xffe6650d*/ v10 = 0; /*0xffe66510*/ n4_1 = (unsigned int)&src_1[-dst_1]; /*0xffe66514*/ if ( (unsigned int)src_1 < dst_1 ) /*0xffe66516*/ { n4_1 = dst_1 - (_DWORD)src_1; /*0xffe6651b*/ if ( (unsigned int)&src_1[n4] >= dst_1 ) /*0xffe6651f*/ { src = &src_1[n4]; /*0xffe66521*/ dst = (char *)(n4 + dst_1); /*0xffe66523*/ v10 = 1; /*0xffe66526*/ } } if ( n4 < 4 || n4_1 < 4 ) /*0xffe66531*/ goto LABEL_19; /*0xffe66531*/ count = (unsigned __int8)src & 3; /*0xffe66537*/ count_1 = (unsigned __int8)dst & 3; /*0xffe6653a*/ if ( v10 ) /*0xffe6653f*/ { --src; /*0xffe66541*/ --dst; /*0xffe66542*/ } if ( count == count_1 && count ) /*0xffe66549*/ { if ( !v10 ) /*0xffe6654d*/ count = 4 - count; /*0xffe66551*/ qmemcpy(dst, src, count); /*0xffe66557*/ src += count; /*0xffe66557*/ dst += count; /*0xffe66557*/ count_2 = n4 - count; /*0xffe66559*/ } if ( v10 ) /*0xffe6655d*/ { src -= 3; /*0xffe6655f*/ dst -= 3; /*0xffe66562*/ } count_3 = count_2; /*0xffe66565*/ v15 = count_2 >> 2; /*0xffe66567*/ qmemcpy(dst, src, 4 * v15); /*0xffe6656a*/ src += 4 * v15; /*0xffe6656a*/ dst += 4 * v15; /*0xffe6656a*/ count_4 = count_3 & 3; /*0xffe6656c*/ if ( count_4 ) /*0xffe6656f*/ { if ( v10 ) /*0xffe66573*/ { src += 4; /*0xffe66575*/ dst += 4; /*0xffe66578*/ } count_2 = count_4; /*0xffe6657b*/ LABEL_19: if ( v10 ) /*0xffe6657f*/ { --src; /*0xffe66581*/ --dst; /*0xffe66582*/ } qmemcpy(dst, src, count_2); /*0xffe66583*/ } __asm { popfw } /*0xffe66585*/ return dst_1; /*0xffe66588*/ }