Newer
Older
AMI-Aptio-BIOS-Reversed / SetupDefaultLoad / sub_A6C.txt
@Ajax Dong Ajax Dong 2 days ago 7 KB Init
__int64 __fastcall sub_A6C(unsigned __int8 a1)
{
  int v1; // ebx
  __int64 v2; // rdx
  __int64 n4; // r8
  __int64 v4; // r9
  __int64 v5; // rdi
  __int64 v6; // rsi
  __int64 v7; // rbx
  char n2_4; // al
  __int64 v9; // rax
  char n2_2; // cl
  char n2_1; // al
  __int64 v12; // rax
  char v13; // cl
  __int64 v14; // rax
  char v15; // dl
  unsigned __int8 v17; // [rsp+30h] [rbp-D0h] BYREF
  char n8; // [rsp+31h] [rbp-CFh]
  char n2; // [rsp+32h] [rbp-CEh] BYREF
  char v20; // [rsp+33h] [rbp-CDh]
  char v21; // [rsp+34h] [rbp-CCh]
  char n2_3; // [rsp+35h] [rbp-CBh]
  char v23; // [rsp+36h] [rbp-CAh]
  char v24; // [rsp+37h] [rbp-C9h]
  char v25; // [rsp+38h] [rbp-C8h]
  char v26; // [rsp+39h] [rbp-C7h]
  _BYTE v27[72]; // [rsp+140h] [rbp+40h] BYREF
  char n15; // [rsp+188h] [rbp+88h]
  _BYTE v29[11]; // [rsp+310h] [rbp+210h] BYREF
  char n3; // [rsp+31Bh] [rbp+21Bh]
  _BYTE v31[52]; // [rsp+3F0h] [rbp+2F0h] BYREF
  char n7; // [rsp+424h] [rbp+324h]
  char v33; // [rsp+426h] [rbp+326h]
  char v34; // [rsp+428h] [rbp+328h]
  char v35; // [rsp+42Ah] [rbp+32Ah]
  char v36; // [rsp+42Ch] [rbp+32Ch]
  char v37; // [rsp+42Eh] [rbp+32Eh]
  char v38; // [rsp+430h] [rbp+330h]
  char n2_5; // [rsp+477h] [rbp+377h]
  char v40; // [rsp+50Ah] [rbp+40Ah]
  _BYTE v41[304]; // [rsp+720h] [rbp+620h] BYREF
  _BYTE v42[352]; // [rsp+850h] [rbp+750h] BYREF
  _BYTE v43[528]; // [rsp+9B0h] [rbp+8B0h] BYREF
  _BYTE v44[1504]; // [rsp+BC0h] [rbp+AC0h] BYREF
  char v45[6688]; // [rsp+11A0h] [rbp+10A0h] BYREF
  char v46; // [rsp+2BD0h] [rbp+2AD0h] BYREF
  __int64 n301; // [rsp+2BD8h] [rbp+2AD8h] BYREF

  n301 = 0; /*0xa83*/
  v1 = a1; /*0xa90*/
  v17 = a1; /*0xa98*/
  n8 = 0; /*0xa9c*/
  sub_5490(&n2, 256); /*0xaa1*/
  v5 = 0; /*0xaa6*/
  v6 = 0; /*0xaa8*/
  if ( !(_BYTE)v1 ) /*0xaae*/
  {
    n8 = 8; /*0xf22*/
    n301 = 301; /*0xf48*/
    v7 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xf5d*/
           L"SocketProcessorCoreConfig",
           &unk_7410,
           &v46,
           &n301,
           v41);
    if ( v7 >= 0 ) /*0xf63*/
    {
      n2 = v41[5] == 0; /*0xf72*/
      v20 = v41[7]; /*0xf77*/
    }
    n301 = 462; /*0xf7f*/
    v6 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xfb5*/
           L"SocketPowerManagementConfig",
           &unk_7430,
           &v46,
           &n301,
           v27);
    if ( v6 >= 0 ) /*0xfbb*/
    {
      v21 = v27[4]; /*0xfc0*/
      n2_3 = v27[24]; /*0xfc7*/
      v23 = v27[46]; /*0xfce*/
      v24 = v27[49]; /*0xfd5*/
      v25 = v27[48]; /*0xfdc*/
      v26 = v27[63]; /*0xfe3*/
    }
    goto LABEL_53; /*0xfe3*/
  }
  switch ( v1 )
  {
    case 1:
      n8 = 5; /*0xde5*/
      n301 = 341; /*0xe0b*/
      v12 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xe1d*/
              L"SocketMpLinkConfig",
              &unk_74A0,
              &v46,
              &n301,
              v42);
      v13 = v20; /*0xe20*/
      v7 = v12; /*0xe2c*/
      n301 = 514; /*0xe2f*/
      if ( v12 >= 0 ) /*0xe52*/
        v13 = v42[21]; /*0xe52*/
      v20 = v13; /*0xe68*/
      v14 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xe73*/
              L"SocketMemoryConfig",
              &unk_73E0,
              &v46,
              &n301,
              v43);
      v15 = v23; /*0xe76*/
      v6 = v14; /*0xe9a*/
      n301 = 224; /*0xe9d*/
      if ( v14 >= 0 ) /*0xea8*/
        v15 = v43[168]; /*0xea8*/
      v23 = v15; /*0xeb2*/
      v5 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xecd*/
             L"SocketCommonRcConfig",
             &unk_74B0,
             &v46,
             &n301,
             v29);
      if ( v5 >= 0 )
      {
        n2 = v29[9]; /*0xee4*/
        if ( n3 == 3 )
          v21 = 1; /*0xef2*/
        else
          v21 = n3 != 0 ? v21 : 0;
        n2_3 = v29[10]; /*0xf07*/
        n301 = 224; /*0xf0b*/
      }
      goto LABEL_53; /*0xf16*/
    case 2:
      n8 = 2; /*0xd06*/
      n301 = 462; /*0xd2c*/
      v5 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xd41*/
             L"SocketPowerManagementConfig",
             &unk_7430,
             &v46,
             &n301,
             v27);
      if ( v5 >= 0 ) /*0xd47*/
      {
        if ( n15 ) /*0xd51*/
        {
          if ( n15 == 7 ) /*0xd5d*/
          {
            n2 = 1; /*0xd5f*/
          }
          else if ( n15 == 8 ) /*0xd69*/
          {
            n2 = 2; /*0xd6b*/
          }
          else
          {
            n2_1 = n2; /*0xd72*/
            if ( n15 == 15 ) /*0xd7f*/
              n2_1 = 3; /*0xd7f*/
            n2 = n2_1; /*0xd82*/
          }
        }
        else
        {
          n2 = 0; /*0xd53*/
        }
      }
      n301 = 814; /*0xd8d*/
      v7 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xdc3*/
             L"Setup",
             &unk_7568,
             &v46,
             &n301,
             v31);
      if ( v7 < 0 ) /*0xdc9*/
        return v5; /*0xdc9*/
      v20 = v40; /*0xdd5*/
      goto LABEL_53; /*0xdd9*/
    case 3:
      n8 = 5; /*0xc38*/
      n301 = 6668; /*0xc5e*/
      v9 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, char *))(qword_7940 + 72))( /*0xc70*/
             L"SocketIioConfig",
             &unk_7470,
             &v46,
             &n301,
             v45);
      n2_2 = n2; /*0xc73*/
      v5 = v9; /*0xc7f*/
      n301 = 1495; /*0xc82*/
      if ( v9 >= 0 ) /*0xca5*/
        n2_2 = v45[0]; /*0xca5*/
      n2 = n2_2; /*0xcbb*/
      v7 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xcc9*/
             L"PchRcConfiguration",
             &unk_73B0,
             &v46,
             &n301,
             v44);
      if ( v7 < 0 ) /*0xccf*/
        return v5; /*0xccf*/
      v20 = v44[196]; /*0xcdb*/
      v21 = v44[197]; /*0xce5*/
      n2_3 = v44[82]; /*0xcef*/
      v23 = v44[83]; /*0xcf9*/
      goto LABEL_53; /*0xcfd*/
    case 4:
      n8 = 0; /*0xc27*/
      return sub_9A4((char *)&v17, v2, n4, v4); /*0x1000*/
    case 5:
      n8 = 8; /*0xb49*/
      n301 = 814; /*0xb6f*/
      v5 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xb84*/
             L"Setup",
             &unk_7568,
             &v46,
             &n301,
             v31);
      if ( v5 < 0 ) /*0xb8a*/
        return v5; /*0xb8a*/
      LOBYTE(v2) = n7; /*0xb96*/
      v20 = v37; /*0xb9c*/
      v21 = v38; /*0xba6*/
      v23 = v36; /*0xbb0*/
      v24 = v33 - 7; /*0xbbd*/
      v25 = v34 - 1; /*0xbc9*/
      if ( n7 == 3 ) /*0xbd4*/
      {
        n2_3 = 0; /*0xbd6*/
      }
      else
      {
        n4 = 4; /*0xbdd*/
        switch ( n7 ) /*0xbe6*/
        {
          case 4: /*0xbe6*/
            n2_3 = 1; /*0xbe8*/
            break;
          case 5: /*0xbe6*/
            n2_3 = 2; /*0xbf4*/
            break;
          case 6: /*0xbe6*/
            n2_3 = 3; /*0xc00*/
            break;
          default:
            n2_4 = n2_3; /*0xc06*/
            if ( n7 == 7 ) /*0xc0e*/
              n2_4 = 4; /*0xc0e*/
            n2_3 = n2_4; /*0xc12*/
            break;
        }
      }
      v26 = v35 != 1; /*0xc1d*/
      break;
    case 6:
      n8 = 1; /*0xaed*/
      n301 = 814; /*0xb12*/
      v7 = (*(__int64 (__fastcall **)(const __int16 *, void *, char *, __int64 *, _BYTE *))(qword_7940 + 72))( /*0xb27*/
             L"Setup",
             &unk_7568,
             &v46,
             &n301,
             v31);
      if ( v7 < 0 ) /*0xb2d*/
        return v5; /*0xb2d*/
      n2 = n2_5; /*0xb39*/
LABEL_53:
      if ( v7 < 0 || v6 < 0 ) /*0xfef*/
        return v5; /*0xfef*/
      break;
  }
  if ( v5 >= 0 ) /*0xff4*/
    return sub_9A4((char *)&v17, v2, n4, v4); /*0xff4*/
  return v5; /*0x100e*/
}