Newer
Older
AMI-Aptio-BIOS-Reversed / DxeIpl / DxeIplFvExtractSection.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
/* DxeIplFvExtractSection @ 0xffc156d7 size=0x11c */
int __cdecl DxeIplFvExtractSection(int a1, unsigned int a2, int *a3, unsigned int *a4)
{
  unsigned int v4; // ecx
  unsigned int v6; // edi
  int n13; // ecx
  int v8; // ecx
  int v9; // ebp
  int v10; // eax
  int v11; // esi
  int v12; // eax
  int v13; // [esp-14h] [ebp-18h]
  unsigned int v14; // [esp+0h] [ebp-4h] BYREF

  v14 = v4; /*0xffc156d7*/
  if ( *(_BYTE *)(a2 + 3) != 1 ) /*0xffc156e0*/
    return -2147483646; /*0xffc156e8*/
  if ( (*(_DWORD *)a2 & 0xFFFFFF) == 0xFFFFFF ) /*0xffc156f6*/
  {
    v6 = *(_DWORD *)(a2 + 8); /*0xffc156fe*/
    n13 = 13; /*0xffc15703*/
    LOBYTE(a2) = *(_BYTE *)(a2 + 12); /*0xffc15706*/
  }
  else
  {
    v6 = *(_DWORD *)(a2 + 4); /*0xffc1570c*/
    LOBYTE(a2) = *(_BYTE *)(a2 + 8); /*0xffc15717*/
    n13 = 9; /*0xffc1571b*/
  }
  if ( (_BYTE)a2 ) /*0xffc15729*/
  {
    if ( (unsigned __int8)a2 != 1 || (int)sub_FFC16D80(&v14, &a2) < 0 ) /*0xffc15745*/
      return -2147483634; /*0xffc15745*/
    v9 = sub_FFC1632D(v13, (a2 >> 12) + ((a2 & 0xFFF) != 0)); /*0xffc15764*/
    if ( v9 ) /*0xffc15768*/
    {
      v6 = v14; /*0xffc1576a*/
      v10 = sub_FFC1632D(v8, (v14 >> 12) + ((v14 & 0xFFF) != 0) + 1); /*0xffc1577e*/
      if ( v10 ) /*0xffc15787*/
      {
        v11 = v10 + 4092; /*0xffc15789*/
        if ( (int)sub_FFC16DAF(v9, 1) < 0 ) /*0xffc1579f*/
          return -2147483634; /*0xffc157a6*/
        goto LABEL_16; /*0xffc1579f*/
      }
    }
    return -2147483639; /*0xffc157cc*/
  }
  v12 = sub_FFC1632D(n13, (v6 >> 12) + ((v6 & 0xFFF) != 0) + 1); /*0xffc157bc*/
  if ( !v12 ) /*0xffc157c5*/
    return -2147483639; /*0xffc157c5*/
  v11 = v12 + 4092; /*0xffc157ce*/
  sub_FFC162D3(v6); /*0xffc157d9*/
LABEL_16:
  *a4 = v6; /*0xffc157df*/
  *a3 = v11; /*0xffc157e9*/
  return 0; /*0xffc156e8*/
}