Newer
Older
AMI-Aptio-BIOS-Reversed / DxeIpl / DxeIplFvReadSection.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
/* DxeIplFvReadSection @ 0xffc155c3 size=0x114 */
int __cdecl DxeIplFvReadSection(int a1, int a2, int *a3, unsigned int *a4, int a5)
{
  int v5; // edi
  int result; // eax
  unsigned int v7; // esi
  unsigned int v8; // ecx
  int v9; // ecx
  int v10; // eax
  _BYTE v11[4]; // [esp+Ch] [ebp-14h] BYREF
  _DWORD *v12; // [esp+10h] [ebp-10h] BYREF
  unsigned int v13; // [esp+14h] [ebp-Ch] BYREF
  unsigned int v14; // [esp+18h] [ebp-8h]
  unsigned int v15; // [esp+1Ch] [ebp-4h] BYREF

  v5 = 0; /*0xffc155d3*/
  result = sub_FFC163A4(&v12); /*0xffc155d5*/
  if ( result >= 0 ) /*0xffc155df*/
  {
    v7 = 0; /*0xffc155ef*/
    v8 = v12[1]; /*0xffc15603*/
    v14 = v8; /*0xffc15606*/
    if ( v8 ) /*0xffc1560c*/
    {
      v8 = v12[2]; /*0xffc1560e*/
      while ( !(unsigned __int8)sub_FFC16309(v8) ) /*0xffc15618*/
      {
        ++v7; /*0xffc1561a*/
        v8 = v9 + 16; /*0xffc1561b*/
        if ( v7 >= v14 ) /*0xffc15622*/
          goto LABEL_6; /*0xffc15622*/
      }
      result = (*(int (__cdecl **)(int, unsigned int *, unsigned int *, _BYTE *))(v12[4] + 4 * v7))(a2, &v13, &v15, v11); /*0xffc15675*/
    }
    else
    {
LABEL_6:
      result = -2147483645; /*0xffc15624*/
    }
    if ( result >= 0 ) /*0xffc1562b*/
    {
      if ( v15 ) /*0xffc15637*/
      {
        v5 = sub_FFC1632D(v8, (v15 >> 12) + ((v15 & 0xFFF) != 0)); /*0xffc15651*/
        if ( !v5 ) /*0xffc15655*/
          return -2147483639; /*0xffc15655*/
      }
      if ( (v11[0] & 1) != 0 && v13 ) /*0xffc1568d*/
      {
        v10 = sub_FFC1632D(v8, (v13 >> 12) + ((v13 & 0xFFF) != 0) + 1); /*0xffc156a0*/
        *a3 = v10; /*0xffc156a5*/
        if ( !v10 ) /*0xffc156a9*/
          return -2147483639; /*0xffc1565c*/
        *a3 = v10 + 4092; /*0xffc156b0*/
      }
      result = sub_FFC164EE(v5, a5); /*0xffc156ba*/
      if ( result >= 0 ) /*0xffc156c3*/
      {
        *a4 = v13; /*0xffc156cc*/
        return 0; /*0xffc156ce*/
      }
    }
  }
  return result; /*0xffc156d0*/
}