=== 0xffdb22b4 === char *__cdecl sub_FFDB22B4(char *dst, char *src, unsigned int count_1) { unsigned int count; // edx char *dst_1; // edi char *src_1; // esi count = count_1; /*0xffdb22be*/ if ( src < dst && &src[count_1 - 1] >= dst ) /*0xffdb22cc*/ { src_1 = &src[count_1 - 1]; /*0xffdb22e0*/ dst_1 = &dst[count_1 - 1]; /*0xffdb22e2*/ } else { count = count_1 & 3; /*0xffdb22d0*/ qmemcpy(dst, src, 4 * (count_1 >> 2)); /*0xffdb22d9*/ src_1 = &src[4 * (count_1 >> 2)]; /*0xffdb22d9*/ dst_1 = &dst[4 * (count_1 >> 2)]; /*0xffdb22d9*/ } qmemcpy(dst_1, src_1, count); /*0xffdb22e9*/ return dst; /*0xffdb22f0*/ } === 0xffdb22f4 === void *__cdecl sub_FFDB22F4(void *buf, unsigned int count) { memset(buf, 0, count); /*0xffdb230b*/ return buf; /*0xffdb2312*/ } === 0xffdb2314 === void *__cdecl sub_FFDB2314(void *buf, unsigned int count, char value) { memset(buf, value, count); /*0xffdb2321*/ return buf; /*0xffdb2327*/ } === 0xffdb2334 === int __cdecl sub_FFDB2334(int a1, int a2, int a3, int a4) { do /*0xffdb234d*/ { *(_DWORD *)(a1 + 8 * a2 - 8) = a3; /*0xffdb2345*/ *(_DWORD *)(a1 + 8 * a2-- - 4) = a4; /*0xffdb2349*/ } while ( a2 ); /*0xffdb234d*/ return a1; /*0xffdb2351*/ } === 0xffdb2354 === void *__cdecl sub_FFDB2354(void *buf, unsigned int count, int value) { memset32(buf, value, count); /*0xffdb2361*/ return buf; /*0xffdb2367*/ } === 0xffdb294a === int __thiscall sub_FFDB294A(void *this) { int v2; // eax int v4; // [esp+4h] [ebp-4h] BYREF v2 = sub_FFDB3430(); /*0xffdb2951*/ if ( (*(int (__cdecl **)(int, void *, int *))(*(_DWORD *)v2 + 76))(v2, this, &v4) >= 0 ) /*0xffdb2967*/ return v4; /*0xffdb296d*/ else return 0; /*0xffdb2969*/ } === 0xffdb2974 === int __thiscall sub_FFDB2974(void *this) { int result; // eax result = sub_FFDB294A(this); /*0xffdb2977*/ if ( result ) /*0xffdb297e*/ return sub_FFDB29FB(result, this); /*0xffdb2985*/ return result; /*0xffdb2984*/ } === 0xffdb298c === char *__fastcall sub_FFDB298C(char *dst, char *src, unsigned int count) { int v5; // eax int v6; // eax if ( count - 1 > -1 - (int)dst ) /*0xffdb29a2*/ { v5 = sub_FFDB2D0E(); /*0xffdb29a4*/ if ( v5 ) /*0xffdb29ab*/ (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffdb29b9*/ "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c", 56, "(Length - 1) <= (0xFFFFFFFF - (UINTN)DestinationBuffer)"); } if ( count - 1 > -1 - (int)src ) /*0xffdb29c3*/ { v6 = sub_FFDB2D0E(); /*0xffdb29c5*/ if ( v6 ) /*0xffdb29cc*/ (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffdb29da*/ "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\CopyMemWrapper.c", 57, "(Length - 1) <= (0xFFFFFFFF - (UINTN)SourceBuffer)"); } if ( dst == src ) /*0xffdb29e2*/ return dst; /*0xffdb29e4*/ else return sub_FFDB22B4(dst, src, count); /*0xffdb29ee*/ } === 0xffdb29fb === void *__fastcall sub_FFDB29FB(int buf, unsigned int this) { int v5; // eax int v6; // eax if ( !this ) /*0xffdb2a03*/ return (void *)buf; /*0xffdb2a05*/ if ( !buf ) /*0xffdb2a11*/ { v5 = sub_FFDB2D0E(); /*0xffdb2a13*/ if ( v5 ) /*0xffdb2a1a*/ (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffdb2a24*/ "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c", 53, "Buffer != ((void *) 0)"); } if ( this > -buf ) /*0xffdb2a30*/ { v6 = sub_FFDB2D0E(); /*0xffdb2a32*/ if ( v6 ) /*0xffdb2a39*/ (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffdb2a43*/ "e:\\hs\\MdePkg\\Library\\BaseMemoryLibRepStr\\ZeroMemWrapper.c", 54, "Length <= (0xFFFFFFFF - (UINTN)Buffer + 1)"); } return sub_FFDB22F4((void *)buf, this); /*0xffdb2a53*/ } === 0xffdb2a56 === __int16 __fastcall sub_FFDB2A56(int a1, unsigned int a2) { char v2; // al int v4; // eax int v5; // eax int v6; // eax int v7; // eax unsigned int v8; // ebx unsigned int v9; // ecx __int16 result; // ax v2 = a1; /*0xffdb2a5b*/ if ( !a1 ) /*0xffdb2a6b*/ { v4 = sub_FFDB2D0E(); /*0xffdb2a6d*/ if ( v4 ) /*0xffdb2a74*/ (*(void (__cdecl **)(const char *, int, const char *))(v4 + 4))( /*0xffdb2a7e*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\CheckSum.c", 122, "Buffer != ((void *) 0)"); v2 = 0; /*0xffdb2a84*/ } if ( (v2 & 1) != 0 ) /*0xffdb2a89*/ { v5 = sub_FFDB2D0E(); /*0xffdb2a8b*/ if ( v5 ) /*0xffdb2a92*/ (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffdb2a9c*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\CheckSum.c", 123, "((UINTN) Buffer & 0x1) == 0"); } if ( (a2 & 1) != 0 ) /*0xffdb2aa5*/ { v6 = sub_FFDB2D0E(); /*0xffdb2aa7*/ if ( v6 ) /*0xffdb2aae*/ (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffdb2ab8*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\CheckSum.c", 124, "(Length & 0x1) == 0"); } if ( a2 > -a1 ) /*0xffdb2ac7*/ { v7 = sub_FFDB2D0E(); /*0xffdb2ac9*/ if ( v7 ) /*0xffdb2ad0*/ (*(void (__cdecl **)(const char *, int, const char *))(v7 + 4))( /*0xffdb2ada*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\CheckSum.c", 125, "Length <= (0xFFFFFFFF - ((UINTN) Buffer) + 1)"); } v8 = a2 >> 1; /*0xffdb2ae0*/ v9 = 0; /*0xffdb2ae4*/ for ( result = 0; v9 < v8; ++v9 ) /*0xffdb2aeb*/ result += *(_WORD *)(a1 + 2 * v9); /*0xffdb2aed*/ return result; /*0xffdb2af6*/ } === 0xffdb2afd === int __thiscall sub_FFDB2AFD(void *this) { int v1; // eax int v2; // eax int v3; // eax int v5; // [esp+0h] [ebp-4h] BYREF v1 = sub_FFDB3430(this); /*0xffdb2b01*/ v5 = (int)&v5; /*0xffdb2b09*/ v2 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD))(*(_DWORD *)v1 + 32))(v1, &unk_FFDB4124, 0, 0); /*0xffdb2b16*/ if ( v2 < 0 ) /*0xffdb2b1e*/ { v5 = v2; /*0xffdb2b20*/ sub_FFDB2D3F(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n"); /*0xffdb2b2b*/ v3 = sub_FFDB2D0E(); /*0xffdb2b33*/ if ( v3 ) /*0xffdb2b3a*/ (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffdb2b48*/ "e:\\hs\\MdePkg\\Library\\PeiPcdLib\\PeiPcdLib.c", 49, "!EFI_ERROR (Status)"); } return v5; /*0xffdb2b53*/ } === 0xffdb2b55 === int sub_FFDB2B55() { int v0; // eax int v1; // eax int v2; // eax int v4; // [esp+0h] [ebp-8h] int v5; // [esp+4h] [ebp-4h] BYREF v0 = sub_FFDB3430(v4); /*0xffdb2b5a*/ if ( (*(int (__cdecl **)(int, int *))(*(_DWORD *)v0 + 48))(v0, &v5) < 0 ) /*0xffdb2b72*/ { sub_FFDB2D3F(0x80000000, "\nASSERT_EFI_ERROR (Status = %r)\n"); /*0xffdb2b7f*/ v1 = sub_FFDB2D0E(); /*0xffdb2b87*/ if ( v1 ) /*0xffdb2b8e*/ (*(void (__cdecl **)(const char *, int, const char *))(v1 + 4))( /*0xffdb2b98*/ "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", 50, "!EFI_ERROR (Status)"); } if ( !v5 ) /*0xffdb2ba2*/ { v2 = sub_FFDB2D0E(); /*0xffdb2ba4*/ if ( v2 ) /*0xffdb2bab*/ (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffdb2bb5*/ "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", 51, "HobList != ((void *) 0)"); } return v5; /*0xffdb2bbe*/ } === 0xffdb2bc3 === _WORD *__fastcall sub_FFDB2BC3(int a1, _WORD *a2) { _WORD *v2; // esi int v3; // eax v2 = a2; /*0xffdb2bc4*/ if ( !a2 ) /*0xffdb2bc8*/ { v3 = sub_FFDB2D0E(); /*0xffdb2bca*/ if ( v3 ) /*0xffdb2bd1*/ (*(void (__cdecl **)(const char *, int, const char *))(v3 + 4))( /*0xffdb2bdf*/ "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", 82, "HobStart != ((void *) 0)"); } while ( 1 ) /*0xffdb2bf8*/ { if ( *v2 == 0xFFFF ) /*0xffdb2bfe*/ return 0; /*0xffdb2c03*/ if ( *v2 == 4 ) /*0xffdb2bf0*/ break; /*0xffdb2bf0*/ v2 = (_WORD *)((char *)v2 + (unsigned __int16)v2[1]); /*0xffdb2bf6*/ } return v2; /*0xffdb2c02*/ } === 0xffdb2c08 === int __fastcall sub_FFDB2C08(int a1, int a2) { int v4; // eax int v5; // eax int v7; // [esp+0h] [ebp-10h] int v8; // [esp+Ch] [ebp-4h] BYREF v4 = sub_FFDB3430(v7); /*0xffdb2c13*/ if ( (*(int (__cdecl **)(int, int, int, int *))(*(_DWORD *)v4 + 52))(v4, a1, a2, &v8) < 0 ) /*0xffdb2c2c*/ v8 = 0; /*0xffdb2c2e*/ if ( !v8 ) /*0xffdb2c36*/ { v5 = sub_FFDB2D0E(); /*0xffdb2c38*/ if ( v5 ) /*0xffdb2c3f*/ (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffdb2c50*/ "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", 250, "Hob != ((void *) 0)"); } return v8; /*0xffdb2c27*/ } === 0xffdb2c5d === char __cdecl sub_FFDB2C5D(unsigned int a1) { int v1; // ecx unsigned int n8; // esi v1 = *(_DWORD *)(a1 + 44); /*0xffdb2c63*/ if ( v1 < 0 ) /*0xffdb2c68*/ return 1; /*0xffdb2c68*/ n8 = 1 << (BYTE2(v1) & 0x1F); /*0xffdb2c73*/ if ( n8 < 8 ) /*0xffdb2c78*/ n8 = 8; /*0xffdb2c7c*/ if ( !(a1 % n8) ) /*0xffdb2c81*/ return 1; /*0xffdb2caa*/ sub_FFDB2D3F(0x80000000, "Unaligned FvImage found at 0x%lx:0x%lx, the required alignment is 0x%x\n"); /*0xffdb2c9e*/ return 0; /*0xffdb2cac*/ } === 0xffdb2caf === int __cdecl sub_FFDB2CAF(unsigned int a1, int a2) { int result; // eax if ( sub_FFDB2C5D(a1) ) /*0xffdb2cbe*/ { result = sub_FFDB2C08(5, 24); /*0xffdb2cf0*/ if ( result ) /*0xffdb2cf7*/ { *(_DWORD *)(result + 20) = 0; /*0xffdb2cf9*/ *(_DWORD *)(result + 8) = a1; /*0xffdb2cfd*/ *(_DWORD *)(result + 12) = a2; /*0xffdb2d00*/ *(_DWORD *)(result + 16) = 0x2000000; /*0xffdb2d03*/ } } else { result = sub_FFDB2D0E(); /*0xffdb2cca*/ if ( result ) /*0xffdb2cd1*/ return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffdb2ce2*/ "e:\\hs\\MdePkg\\Library\\PeiHobLib\\HobLib.c", 556, "((BOOLEAN)(0==1))"); } return result; /*0xffdb2d0a*/ } === 0xffdb2d0e === int sub_FFDB2D0E() { int v0; // eax int v2; // [esp+0h] [ebp-8h] BYREF int v3; // [esp+4h] [ebp-4h] BYREF v0 = sub_FFDB3430(v2); /*0xffdb2d13*/ if ( (*(int (__cdecl **)(int, void *, _DWORD, int *, int *))(*(_DWORD *)v0 + 32))(v0, &unk_FFDB4084, 0, &v2, &v3) >= 0 ) /*0xffdb2d32*/ return v3; /*0xffdb2d38*/ else return 0; /*0xffdb2d34*/ } === 0xffdb2d3f === int sub_FFDB2D3F(int a1, int a2, ...) { int result; // eax int (__cdecl **v3)(int, int, char *); // esi va_list va; // [esp+10h] [ebp+Ch] BYREF va_start(va, a2); result = sub_FFDB2D0E(); /*0xffdb2d40*/ v3 = (int (__cdecl **)(int, int, char *))result; /*0xffdb2d45*/ if ( result ) /*0xffdb2d49*/ { result = sub_FFDB32F2(); /*0xffdb2d4b*/ if ( (result & a1) != 0 ) /*0xffdb2d56*/ return (*v3)(a1, a2, (char *)va); /*0xffdb2d62*/ } return result; /*0xffdb2d67*/ } === 0xffdb2d69 === int __fastcall sub_FFDB2D69(int a1, int a2, int a3) { int result; // eax result = sub_FFDB2D0E(); /*0xffdb2d6f*/ if ( result ) /*0xffdb2d76*/ return (*(int (__cdecl **)(int, int, int))(result + 4))(a1, a2, a3); /*0xffdb2d7e*/ return result; /*0xffdb2d84*/ } === 0xffdb2d87 === int __usercall sub_FFDB2D87@(int a1@, int a2) { int buf; // eax _DWORD *buf_1; // esi int v5; // eax int v6; // eax _DWORD *v7; // edi int v8; // eax int v9; // eax int result; // eax int v11; // [esp+0h] [ebp-10h] buf = sub_FFDB294A((void *)0x20); /*0xffdb2d90*/ buf_1 = (_DWORD *)buf; /*0xffdb2d95*/ if ( !buf || (buf_1 = sub_FFDB29FB(buf, 0x20u)) == 0 ) /*0xffdb2dae*/ { v5 = sub_FFDB2D0E(); /*0xffdb2db0*/ if ( v5 ) /*0xffdb2db7*/ (*(void (__cdecl **)(const char *, int, const char *))(v5 + 4))( /*0xffdb2dc4*/ "e:\\hs\\MdePkg\\Library\\PeiServicesLib\\PeiServicesLib.c", 653, "FvInfoPpi != ((void *) 0)"); } if ( a1 ) /*0xffdb2dd2*/ { sub_FFDB3341(buf_1, a1); /*0xffdb2dd6*/ } else { sub_FFDB3341(buf_1, &unk_FFDB40D4); /*0xffdb2de4*/ if ( !(unsigned __int8)sub_FFDB3371(a2 + 16, &unk_FFDB40D4) ) /*0xffdb2dee*/ { v6 = sub_FFDB2D0E(); /*0xffdb2df7*/ if ( v6 ) /*0xffdb2dfe*/ (*(void (__cdecl **)(const char *, int, const char *))(v6 + 4))( /*0xffdb2e0b*/ "e:\\hs\\MdePkg\\Library\\PeiServicesLib\\PeiServicesLib.c", 678, "CompareGuid (&(((EFI_FIRMWARE_VOLUME_HEADER *) FvInfo)->FileSystemGuid), &gEfiFirmwareFileSystem2Guid)"); } } buf_1[4] = a2; /*0xffdb2e14*/ buf_1[5] = 0x2000000; /*0xffdb2e17*/ v7 = (_DWORD *)sub_FFDB294A((void *)0xC); /*0xffdb2e23*/ if ( !v7 ) /*0xffdb2e27*/ { v8 = sub_FFDB2D0E(); /*0xffdb2e29*/ if ( v8 ) /*0xffdb2e30*/ (*(void (__cdecl **)(const char *, int, const char *))(v8 + 4))( /*0xffdb2e3d*/ "e:\\hs\\MdePkg\\Library\\PeiServicesLib\\PeiServicesLib.c", 694, "FvInfoPpiDescriptor != ((void *) 0)"); } v7[1] = &unk_FFDB40F4; /*0xffdb2e43*/ *v7 = -2147483632; /*0xffdb2e4a*/ v7[2] = buf_1; /*0xffdb2e50*/ v9 = sub_FFDB3430(v11); /*0xffdb2e53*/ result = (*(int (__cdecl **)(int, _DWORD *))(*(_DWORD *)v9 + 24))(v9, v7); /*0xffdb2e5c*/ if ( result < 0 ) /*0xffdb2e63*/ { sub_FFDB2D3F(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", result); /*0xffdb2e70*/ result = sub_FFDB2D0E(); /*0xffdb2e78*/ if ( result ) /*0xffdb2e7f*/ return (*(int (__cdecl **)(const char *, int, const char *))(result + 4))( /*0xffdb2e8c*/ "e:\\hs\\MdePkg\\Library\\PeiServicesLib\\PeiServicesLib.c", 700, "!EFI_ERROR (Status)"); } return result; /*0xffdb2e92*/ } === 0xffdb2e97 === int __usercall sub_FFDB2E97@(_BYTE *a1@, int a2@, int a3@) { int v6; // eax int v7; // eax int v8; // edi int v9; // eax int v10; // [esp+8h] [ebp-4h] BYREF if ( !a1 ) /*0xffdb2ea3*/ return -2147483646; /*0xffdb2ea5*/ *a1 = -1; /*0xffdb2ead*/ v6 = sub_FFDB3430(a3); /*0xffdb2eb0*/ v7 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v6 + 32))(v6, &unk_FFDB4104, 0, 0, &v10); /*0xffdb2ec5*/ v8 = v7; /*0xffdb2ec8*/ if ( v7 < 0 ) /*0xffdb2ecf*/ { sub_FFDB2D3F(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v7); /*0xffdb2edc*/ v9 = sub_FFDB2D0E(); /*0xffdb2ee4*/ if ( v9 ) /*0xffdb2eeb*/ (*(void (__cdecl **)(const char *, int, const char *))(v9 + 4))( /*0xffdb2ef9*/ "e:\\hs\\PurleyPlatPkg\\Library\\FpgaPlatformHooksLib\\FpgaPlatformHooksLib.c", 86, "!EFI_ERROR (Status)"); } *a1 = (*(int (__cdecl **)(int))(v10 + 84))(a2); /*0xffdb2f07*/ return v8; /*0xffdb2f0c*/ } === 0xffdb2f12 === int __fastcall sub_FFDB2F12(int a1, _BYTE *a2, _BYTE *a3) { int v5; // eax int v6; // eax int v7; // eax int v9; // [esp+0h] [ebp-10h] int v10; // [esp+Ch] [ebp-4h] BYREF if ( !a2 || !a3 ) /*0xffdb2f26*/ return -2147483646; /*0xffdb2f8c*/ *a2 = -1; /*0xffdb2f28*/ *a3 = 0; /*0xffdb2f2b*/ v5 = sub_FFDB3430(v9); /*0xffdb2f2e*/ v6 = (*(int (__cdecl **)(int, void *, _DWORD, _DWORD, int *))(*(_DWORD *)v5 + 32))(v5, &unk_FFDB4104, 0, 0, &v10); /*0xffdb2f43*/ if ( v6 < 0 ) /*0xffdb2f4b*/ { sub_FFDB2D3F(0x80000000, (int)"\nASSERT_EFI_ERROR (Status = %r)\n", v6); /*0xffdb2f58*/ v7 = sub_FFDB2D0E(); /*0xffdb2f60*/ if ( v7 ) /*0xffdb2f67*/ (*(void (__cdecl **)(const char *, int, const char *))(v7 + 4))( /*0xffdb2f78*/ "e:\\hs\\PurleyPlatPkg\\Library\\FpgaPlatformHooksLib\\FpgaPlatformHooksLib.c", 135, "!EFI_ERROR (Status)"); } return (*(int (__cdecl **)(int, _BYTE *, _BYTE *))(v10 + 76))(a1, a2, a3); /*0xffdb2f91*/ } === 0xffdb30e3 === int __thiscall sub_FFDB30E3(_BYTE *this) { _BYTE *v3; // ecx _BYTE *v4; // esi _BYTE *v5; // edx char v6; // al int v7; // edi int n4; // ecx _BYTE *v9; // [esp+4h] [ebp-4h] BYREF if ( sub_FFDB2F98((int *)&v9) >= 0 ) /*0xffdb30f4*/ { v3 = v9; /*0xffdb310e*/ v4 = this + 19; /*0xffdb3115*/ v9[2] = *(this + 2); /*0xffdb3118*/ v5 = v3 + 7; /*0xffdb311b*/ v3[3] = *(this + 3); /*0xffdb3121*/ v3[4] = *(this + 4); /*0xffdb3127*/ v3[5] = *(this + 5); /*0xffdb312d*/ v3[6] = *(this + 6); /*0xffdb3133*/ v3[1] = *(this + 1); /*0xffdb3139*/ v3[31] = *(this + 31); /*0xffdb313f*/ v3[32] = *(this + 32); /*0xffdb3145*/ v6 = *(this + 37); /*0xffdb3148*/ v7 = this - v3; /*0xffdb314b*/ v3[37] = v6; /*0xffdb314f*/ n4 = 4; /*0xffdb3152*/ do /*0xffdb3180*/ { *v5 = v5[v7]; /*0xffdb3156*/ v5[8] = *(v4 - 4); /*0xffdb315b*/ v5[12] = *v4; /*0xffdb3160*/ v5[16] = v4[4]; /*0xffdb3166*/ v5[20] = v4[8]; /*0xffdb316c*/ v5[4] = *(v4 - 8); /*0xffdb3172*/ v5[26] = v4[14]; /*0xffdb3178*/ ++v5; /*0xffdb317b*/ ++v4; /*0xffdb317c*/ --n4; /*0xffdb317d*/ } while ( n4 ); /*0xffdb3180*/ return 0; /*0xffdb3182*/ } else { sub_FFDB2D3F(0x80000000, (int)"FpgaConfigurationSetValues-> HOB error, return EFI_NOT_FOUND!\n"); /*0xffdb3100*/ return -2147483634; /*0xffdb3107*/ } } === 0xffdb318a === int __thiscall sub_FFDB318A(_BYTE *this) { _BYTE *v3; // esi _BYTE *v4; // ecx _BYTE *v5; // edx char v6; // al int v7; // esi int n4; // edi _BYTE *v9; // [esp+4h] [ebp-4h] BYREF if ( sub_FFDB2F98((int *)&v9) >= 0 ) /*0xffdb319b*/ { v3 = v9; /*0xffdb31b6*/ v4 = this + 7; /*0xffdb31b9*/ v5 = v9 + 19; /*0xffdb31c1*/ *(this + 2) = v9[2]; /*0xffdb31c4*/ *(this + 3) = v3[3]; /*0xffdb31ca*/ *(this + 4) = v3[4]; /*0xffdb31d0*/ *(this + 5) = v3[5]; /*0xffdb31d6*/ *(this + 6) = v3[6]; /*0xffdb31dc*/ *this = *v3; /*0xffdb31e1*/ *(this + 1) = v3[1]; /*0xffdb31e6*/ *(this + 31) = v3[31]; /*0xffdb31ec*/ *(this + 32) = v3[32]; /*0xffdb31f2*/ v6 = v3[37]; /*0xffdb31f5*/ v7 = v3 - this; /*0xffdb31f8*/ *(this + 37) = v6; /*0xffdb31fa*/ n4 = 4; /*0xffdb31fd*/ do /*0xffdb322b*/ { *v4 = v4[v7]; /*0xffdb3201*/ v4[8] = *(v5 - 4); /*0xffdb3206*/ v4[12] = *v5; /*0xffdb320b*/ v4[16] = v5[4]; /*0xffdb3211*/ v4[20] = v5[8]; /*0xffdb3217*/ v4[4] = *(v5 - 8); /*0xffdb321d*/ v4[26] = v5[14]; /*0xffdb3223*/ ++v4; /*0xffdb3226*/ ++v5; /*0xffdb3227*/ --n4; /*0xffdb3228*/ } while ( n4 ); /*0xffdb322b*/ return 0; /*0xffdb322d*/ } else { sub_FFDB2D3F(0x80000000, (int)"FpgaConfigurationGetValues-> HOB error, return EFI_NOT_FOUND!\n"); /*0xffdb31a7*/ return -2147483634; /*0xffdb31ae*/ } } === 0xffdb3235 === char *sub_FFDB3235() { int v0; // eax int v1; // esi char buf[40]; // [esp+4h] [ebp-28h] BYREF sub_FFDB29FB((int)buf, 0x26u); /*0xffdb3242*/ v0 = sub_FFDB2C08(4, 62); /*0xffdb324d*/ v1 = v0; /*0xffdb3252*/ if ( !v0 ) /*0xffdb3256*/ return 0; /*0xffdb3256*/ sub_FFDB3341((_DWORD *)(v0 + 8), &unk_FFDB4114); /*0xffdb3260*/ if ( v1 == -24 ) /*0xffdb326a*/ return 0; /*0xffdb3279*/ else return sub_FFDB298C((char *)(v1 + 24), buf, 0x26u); /*0xffdb3271*/ } === 0xffdb3280 === int sub_FFDB3280() { int v0; // eax int v1; // eax int v2; // edi int v4; // esi int v5; // [esp+0h] [ebp-10h] int (__cdecl **v6)(_DWORD, const __int16 *, void *, _DWORD, int *, int); // [esp+8h] [ebp-8h] BYREF int n27; // [esp+Ch] [ebp-4h] BYREF n27 = 27; /*0xffdb3287*/ v0 = sub_FFDB3430(v5); /*0xffdb328e*/ (*(void (__cdecl **)(int, void *, _DWORD, _DWORD, int (__cdecl ***)(_DWORD, const __int16 *, void *, _DWORD, int *, int)))(*(_DWORD *)v0 + 32))( /*0xffdb32a3*/ v0, &unk_FFDB4074, 0, 0, &v6); v1 = sub_FFDB2974((void *)n27); /*0xffdb32ac*/ v2 = v1; /*0xffdb32b1*/ if ( v1 /*0xffdb32e8*/ && (v4 = (*v6)(v6, L"FpgaSocketConfig", &unk_FFDB40A4, 0, &n27, v1), sub_FFDB2D3F(0x80000000, (int)"FpgaGetVariable status = %r !\n", v4), v4 >= 0) ) { return v2; /*0xffdb32ea*/ } else { return 0; /*0xffdb32b7*/ } } === 0xffdb32f2 === int sub_FFDB32F2() { unsigned __int8 v0; // al char n3; // al char n3_1; // cl v0 = __inbyte(0x70u); /*0xffdb32f8*/ __outbyte(0x70u, v0 & 0x80 | 0x4A); /*0xffdb32fd*/ n3 = __inbyte(0x71u); /*0xffdb3304*/ n3_1 = n3; /*0xffdb3305*/ if ( (unsigned __int8)n3 <= 3u ) /*0xffdb330a*/ { LABEL_4: if ( !n3_1 ) /*0xffdb3325*/ return 0; /*0xffdb3325*/ goto LABEL_5; /*0xffdb3325*/ } n3_1 = n3; /*0xffdb330c*/ if ( !n3 ) /*0xffdb3314*/ { n3_1 = MEMORY[0xFDAF0490] & 2 | 1; /*0xffdb3320*/ goto LABEL_4; /*0xffdb3320*/ } LABEL_5: if ( n3_1 != -1 ) return n3_1 != 1 ? -2147483578 : -2147483644; return 0; /*0xffdb333d*/ } === 0xffdb3341 === _DWORD *__fastcall sub_FFDB3341(_DWORD *buf, int a2) { __int64 v4; // rax __int64 v5; // rax v4 = sub_FFDB33D0(a2); /*0xffdb3349*/ sub_FFDB33FC(v4, HIDWORD(v4)); /*0xffdb3352*/ v5 = sub_FFDB33D0(a2 + 8); /*0xffdb335a*/ sub_FFDB33FC(v5, HIDWORD(v5)); /*0xffdb3364*/ return buf; /*0xffdb336e*/ } === 0xffdb3371 === bool __fastcall sub_FFDB3371(int a1, int a2) { __int64 v4; // rax int v5; // ebp __int64 v6; // rax int v7; // edi __int64 v8; // kr00_8 __int64 v9; // rax int v11; // [esp+10h] [ebp-Ch] int v12; // [esp+14h] [ebp-8h] v4 = sub_FFDB33D0(a1); /*0xffdb337c*/ v12 = HIDWORD(v4); /*0xffdb3383*/ v5 = v4; /*0xffdb3387*/ v6 = sub_FFDB33D0(a2); /*0xffdb3389*/ v11 = HIDWORD(v6); /*0xffdb3391*/ v7 = v6; /*0xffdb3395*/ v8 = sub_FFDB33D0(a1 + 8); /*0xffdb33a3*/ v9 = sub_FFDB33D0(a2 + 8); /*0xffdb33a5*/ return v5 == v7 && v12 == v11 && v8 == v9; /*0xffdb33c8*/ } === 0xffdb33d0 === __int64 __thiscall sub_FFDB33D0(void *this) { int v2; // eax if ( !this ) /*0xffdb33d5*/ { v2 = sub_FFDB2D0E(); /*0xffdb33d7*/ if ( v2 ) /*0xffdb33de*/ (*(void (__cdecl **)(const char *, int, const char *))(v2 + 4))( /*0xffdb33ef*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 192, "Buffer != ((void *) 0)"); } return *(_QWORD *)this; /*0xffdb33fa*/ } === 0xffdb33fc === int __cdecl sub_FFDB33FC(int a1, int a2) { _DWORD *v2; // ecx _DWORD *v3; // esi int v4; // eax v3 = v2; /*0xffdb33fd*/ if ( !v2 ) /*0xffdb3401*/ { v4 = sub_FFDB2D0E(); /*0xffdb3403*/ if ( v4 ) /*0xffdb340a*/ (*(void (__cdecl **)(const char *, int, const char *))(v4 + 4))( /*0xffdb341b*/ "e:\\hs\\MdePkg\\Library\\BaseLib\\Unaligned.c", 219, "Buffer != ((void *) 0)"); } *v3 = a1; /*0xffdb3429*/ v3[1] = a2; /*0xffdb342b*/ return a1; /*0xffdb342e*/ } === 0xffdb3430 === int sub_FFDB3430() { int v0; // esi _BYTE v2[8]; // [esp+4h] [ebp-8h] BYREF sub_FFDB3462(v2); /*0xffdb3439*/ v0 = *(_DWORD *)(*(_DWORD *)&v2[2] - 4); /*0xffdb3441*/ if ( !v0 ) /*0xffdb3446*/ sub_FFDB2D69( /*0xffdb3455*/ (int)"e:\\hs\\MdePkg\\Library\\PeiServicesTablePointerLibIdt\\PeiServicesTablePointer.c", 48, (int)"PeiServices != ((void *) 0)"); return v0; /*0xffdb345d*/ } === 0xffdb3462 === void *__thiscall sub_FFDB3462(void *this) { void *this_1; // eax if ( !this ) /*0xffdb3468*/ sub_FFDB2D69((int)"e:\\hs\\MdePkg\\Library\\BaseLib\\X86ReadIdtr.c", 37, (int)"Idtr != ((void *) 0)"); /*0xffdb3477*/ this_1 = this; /*0xffdb347d*/ __sidt(this); /*0xffdb3480*/ return this_1; /*0xffdb3484*/ }