Newer
Older
AMI-Aptio-BIOS-Reversed / MdeModulePkg / Core / DxeIplPeim / DxeIplEntry.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Full restructure
/* DxeIplEntry @ 0xffc15aa9 size=0x1ad */
int __cdecl DxeIplEntry(int a1, int a2, int a3)
{
  int v3; // ecx
  int v4; // esi
  int v5; // edi
  int n32; // eax
  int n32_1; // ebx
  int v8; // eax
  int v9; // ecx
  int v10; // eax
  int v12; // ecx
  int v13; // [esp-4h] [ebp-64h]
  int v14; // [esp+Ch] [ebp-54h] BYREF
  int v15; // [esp+10h] [ebp-50h] BYREF
  _BYTE *v16; // [esp+14h] [ebp-4Ch]
  int (__cdecl **v17)(_DWORD, int, _DWORD *, __int64 *, int *, _BYTE *); // [esp+18h] [ebp-48h] BYREF
  _BYTE v18[4]; // [esp+1Ch] [ebp-44h] BYREF
  _BYTE v19[2]; // [esp+20h] [ebp-40h] BYREF
  int v20; // [esp+22h] [ebp-3Eh]
  int v21; // [esp+28h] [ebp-38h] BYREF
  int v22; // [esp+2Ch] [ebp-34h]
  __int64 v23; // [esp+30h] [ebp-30h] BYREF
  _DWORD v24[2]; // [esp+38h] [ebp-28h] BYREF
  _BYTE v25[32]; // [esp+40h] [ebp-20h] BYREF

  v4 = 0; /*0xffc15abd*/
  v5 = 0; /*0xffc15abf*/
  sub_FFC1708F(v3, "DxeIpl"); /*0xffc15ac1*/
  (*(void (__cdecl **)(int, int, int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)a2 + 88))(a2, 1, 50466817, 0, 0, 0); /*0xffc15ad9*/
  n32 = sub_FFC16085(); /*0xffc15adf*/
  n32_1 = n32; /*0xffc15ae4*/
  if ( n32 == 17 ) /*0xffc15ae9*/
  {
    if ( DxeIplCheckBootMode() < 0 ) /*0xffc15af2*/
    {
      sub_FFC16F4A(-2147483646, 50532357); /*0xffc15b01*/
      v16 = v19; /*0xffc15b0d*/
      __sidt(v19); /*0xffc15b15*/
      (*(void (__cdecl **)(_DWORD))(**(_DWORD **)(v20 - 4) + 92))(*(_DWORD *)(v20 - 4)); /*0xffc15b22*/
    }
  }
  else if ( n32 == 32 || n32 == 18 ) /*0xffc15b30*/
  {
    v5 = DxeIplGetNextFfsFile(); /*0xffc15b37*/
    n32_1 = sub_FFC16085(); /*0xffc15b3e*/
  }
  sub_FFC16201(&unk_FFC18AC4); /*0xffc15b45*/
  DxeIplDiscoverDxeCore(n32_1); /*0xffc15b4c*/
  do /*0xffc15b68*/
  {
    v10 = sub_FFC16254(v5++, &v15); /*0xffc15b70*/
    if ( v10 < 0 ) /*0xffc15b78*/
    {
      sub_FFC16F4A(-2147483646, 50466816); /*0xffc15b87*/
      sub_FFC17107(); /*0xffc15b91*/
      return -2147483634; /*0xffc15ba4*/
    }
    v14 = 0; /*0xffc15b5c*/
    v8 = sub_FFC1627D(&v14); /*0xffc15b60*/
    v9 = v13; /*0xffc15b65*/
  }
  while ( v8 < 0 ); /*0xffc15b68*/
  do /*0xffc15bdc*/
  {
    sub_FFC16226(v9, &v17); /*0xffc15bb2*/
    ++v4; /*0xffc15bbb*/
  }
  while ( (*v17)(v17, v14, v24, &v23, &v21, v18) < 0 ); /*0xffc15bdc*/
  v12 = v14; /*0xffc15bde*/
  v16 = v19; /*0xffc15be6*/
  __sidt(v19); /*0xffc15bee*/
  (*(void (__cdecl **)(int, _BYTE *))(**(_DWORD **)(v20 - 4) + 108))(v12, v25); /*0xffc15c00*/
  sub_FFC160EA( /*0xffc15c2f*/
    v25,
    v24[0],
    v24[1],
    v23 + (-(int)v23 & 0xFFF),
    (v23 + (unsigned __int64)(-(int)v23 & 0xFFF)) >> 32,
    v21,
    v22);
  sub_FFC15C56(v21, v22, a3); /*0xffc15c3f*/
  sub_FFC15FB3(); /*0xffc15c47*/
  return -2147483639; /*0xffc15b9e*/
}