Newer
Older
AMI-Aptio-BIOS-Reversed / SystemInventory / SystemInventory_sub_4854.c
@Ajax Dong Ajax Dong 2 days ago 5 KB Init
__int64 __fastcall sub_4854(__int64 a1, __int64 a2, __int64 a3, __int64 a4)
{
  double v4; // xmm3_8
  __int64 v5; // rdx
  __int64 v6; // rcx
  __int64 v7; // rbx
  __int64 v8; // r8
  __int64 v9; // r9
  __int64 result; // rax
  unsigned __int8 v11; // si
  __int64 v12; // rdi
  unsigned __int8 n2; // bp
  __int64 v14; // rdx
  __int64 v15; // rcx
  __int64 v16; // r8
  __int64 v17; // r9
  __int64 v18; // rbx
  unsigned __int8 v19; // dl
  __int64 v20; // rdx
  __int64 v21; // rcx
  __int64 v22; // r8
  __int64 v23; // r9
  __int64 v24; // rdx
  __int64 v25; // rcx
  __int64 v26; // r8
  __int64 v27; // r9
  __int64 v28; // rdx
  __int64 v29; // rcx
  __int64 v30; // r8
  __int64 v31; // r9
  __int64 v32; // rdx
  __int64 v33; // rcx
  __int64 v34; // r8
  __int64 v35; // r9
  __int64 v36; // rdx
  __int64 v37; // rcx
  __int64 v38; // r8
  __int64 v39; // r9
  __int64 v40; // rdx
  __int64 v41; // rcx
  __int64 v42; // r8
  __int64 v43; // r9
  _QWORD v44[9]; // [rsp+30h] [rbp-48h] BYREF
  char v45; // [rsp+80h] [rbp+8h] BYREF
  int v46; // [rsp+88h] [rbp+10h] BYREF
  int v47; // [rsp+90h] [rbp+18h] BYREF
  char v48; // [rsp+98h] [rbp+20h] BYREF

  if ( (unsigned __int8)sub_7F8(a1, a2, a3, a4) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4873*/
    sub_740(0x80000000LL, "Enter InitializeCpuData ... \n"); /*0x4886*/
  *(_BYTE *)(qword_9680 + 86LL) = 2; /*0x4892*/
  if ( qword_9670 /*0x48c3*/
    || (v7 = (*(__int64 (__fastcall **)(void *, _QWORD, __int64 *))(qword_96D8 + 320))(&unk_93F0, 0, &qword_9670),
        v7 >= 0) )
  {
    v11 = 0; /*0x48f9*/
    v12 = 0; /*0x4903*/
    do /*0x4bec*/
    {
      n2 = v11 + 1; /*0x490c*/
      LOBYTE(v5) = v11 + 1; /*0x4917*/
      LOBYTE(v6) = 4; /*0x491f*/
      *(_BYTE *)(v12 + qword_9680 + 87) = v11 + 1; /*0x4921*/
      if ( (*(__int64 (__fastcall **)(__int64, __int64, _QWORD *, char *))(qword_9670 + 64))(v6, v5, v44, &v45) >= 0 ) /*0x4933*/
      {
        v18 = v44[0]; /*0x4939*/
        *(_BYTE *)(v12 + qword_9680 + 88) = *(_BYTE *)(v44[0] + 35LL); /*0x4954*/
        *(_BYTE *)(v12 + qword_9680 + 89) = *(_BYTE *)(v18 + 37); /*0x4962*/
        sub_D38(v12 + qword_9680 + 90LL, 13, "Intel"); /*0x4974*/
        *(_DWORD *)(v12 + qword_9680 + 166) = *(unsigned __int16 *)(v18 + 20); /*0x49a2*/
        sub_27F8(*(_DWORD *)(v18 + 8), (unsigned int)&v48, (unsigned int)&v46, (unsigned int)&v47, 0); /*0x49ac*/
        v19 = 0; /*0x49b6*/
        while ( *((_WORD *)&unk_9518 + 5 * v19) != *(unsigned __int8 *)(v18 + 6) /*0x49d0*/
             && *((_WORD *)&unk_9518 + 5 * v19) != 255 )
        {
          if ( ++v19 >= 3u ) /*0x49d7*/
            goto LABEL_17; /*0x49d7*/
        }
        sub_D38(v12 + qword_9680 + 103LL, 30, *(const char **)((char *)&unk_9518 + 10 * v19 + 2)); /*0x49fa*/
LABEL_17:
        sub_D38(v12 + qword_9680 + 133LL, 30, "%2Xh Model", v46); /*0x49ff*/
        sub_D38(v12 + qword_9680 + 163LL, 3, "%X", v47); /*0x4a4e*/
      }
      if ( (unsigned __int8)sub_7F8(v15, v14, v16, v17) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4a5f*/
        sub_740( /*0x4a83*/
          0x80000000LL,
          "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.CoreCount = %x \n",
          v11,
          *(unsigned __int8 *)(v12 + qword_9680 + 88));
      if ( (unsigned __int8)sub_7F8(v21, v20, v22, v23) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4a94*/
        sub_740( /*0x4ab8*/
          0x80000000LL,
          "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.ThreadCount = %x \n",
          v11,
          *(unsigned __int8 *)(v12 + qword_9680 + 89));
      if ( (unsigned __int8)sub_7F8(v25, v24, v26, v27) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4ac9*/
        sub_740(0x80000000LL, "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.CpuVendor = %a \n", v11, v4); /*0x4aee*/
      if ( (unsigned __int8)sub_7F8(v29, v28, v30, v31) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4aff*/
        sub_740(0x80000000LL, "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.CpuFamilyName = %a \n", v11, v4); /*0x4b24*/
      if ( (unsigned __int8)sub_7F8(v33, v32, v34, v35) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4b35*/
        sub_740(0x80000000LL, "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.CpuModelIdName = %a \n", v11, v4); /*0x4b5d*/
      if ( (unsigned __int8)sub_7F8(v37, v36, v38, v39) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4b6e*/
        sub_740(0x80000000LL, "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.Stepping = %a \n", v11, v4); /*0x4b96*/
      if ( (unsigned __int8)sub_7F8(v41, v40, v42, v43) && (unsigned __int8)sub_804(0x80000000LL) ) /*0x4ba7*/
        sub_740( /*0x4bcd*/
          0x80000000LL,
          "gSystemInventoryProtocol->CpuInfo[%d].SingleCpuInfo.MaxFrequency = %x \n",
          v11,
          *(_DWORD *)(v12 + qword_9680 + 166));
      result = (*(__int64 (__fastcall **)(_QWORD))(qword_96D8 + 72))(v44[0]); /*0x4bde*/
      v12 += 85; /*0x4be1*/
      ++v11; /*0x4be5*/
    }
    while ( n2 < 2u ); /*0x4bec*/
  }
  else
  {
    result = sub_7F8(v6, v5, v8, v9); /*0x48c5*/
    if ( (_BYTE)result ) /*0x48cc*/
    {
      result = sub_804(0x80000000LL); /*0x48d5*/
      if ( (_BYTE)result ) /*0x48dc*/
        return sub_740(0x80000000LL, "LocateProtocol gAmiSmbiosProtocolGuid Status = %r ... \n", v7); /*0x48ef*/
    }
  }
  return result; /*0x4bf2*/
}