Newer
Older
AMI-Aptio-BIOS-Reversed / 117828F1-DA7D-4BC1-8B58-9A954FED5121 / MigrRecord.c
@Ajax Dong Ajax Dong 2 days ago 3 KB Init
#include "117828F1-DA7D-4BC1-8B58-9A954FED5121.h"

// MigrRecord.c - Extracted from 117828F1-DA7D-4BC1-8B58-9A954FED5121.c
// Total functions: 4

// Function: MigrCheckMembers @ 0x1be0c (0x65 bytes)
// Index: 764/906

char __fastcall MigrCheckMembers(_DWORD *a1, __int64 a2)
{
  unsigned __int8 n23_1; // r9
  int n23; // r8d
  __int64 v4; // r8

  n23_1 = 0; /*0x1be0f*/
  if ( *(_BYTE *)(a2 + 42) ) /*0x1be12*/
  {
    while ( 1 ) /*0x1be1c*/
    {
      n23 = 23; /*0x1be1c*/
      if ( n23_1 < 0x18u ) /*0x1be26*/
        n23 = n23_1; /*0x1be26*/
      v4 = *(_QWORD *)(a2 + 16 * (n23 + 7LL)); /*0x1be34*/
      if ( (*(_DWORD *)(v4 + 136) & 0x10) != 0 && (*(_QWORD *)(v4 + 88) & 0xFFFFFFFF00000000uLL) != 0 ) /*0x1be54*/
        return 0; /*0x1be6e*/
      if ( ++n23_1 >= *(_BYTE *)(a2 + 42) ) /*0x1be5d*/
        goto LABEL_7; /*0x1be5d*/
    }
  }
  else
  {
LABEL_7:
    a1[13] = 0; /*0x1be5f*/
    a1[14] = 0; /*0x1be63*/
    a1[12] = 0; /*0x1be67*/
    return 1; /*0x1be6b*/
  }
}


// Function: Assert_13 @ 0x1be74 (0x1d0 bytes)
// Index: 765/906

__int64 __fastcall Assert_13(_DWORD *a1, __int64 a2)
{
  _DWORD *v2; // rdi
  int v4; // eax
  int v5; // r12d
  __int64 v6; // r15
  __int64 v7; // rsi
  int v8; // r14d
  __int64 v9; // rbp
  unsigned __int8 n23_1; // di
  __int16 v11; // r13
  int n23; // ecx
  __int64 v13; // rbx
  int v14; // eax
  bool v15; // zf
  __int64 v17; // [rsp+30h] [rbp-48h] BYREF
  char v18; // [rsp+38h] [rbp-40h]
  __int16 v19; // [rsp+3Ah] [rbp-3Eh]
  int v21; // [rsp+88h] [rbp+10h]
  unsigned int v22; // [rsp+90h] [rbp+18h]

  v2 = a1; /*0x1be91*/
  v17 = 0; /*0x1be9b*/
  v18 = 0; /*0x1be9f*/
  v19 = 1; /*0x1bea9*/
  sub_17B58((__int64)&v17, 0); /*0x1beae*/
  if ( RstDebugEnabled() && !v17 ) /*0x1bec2*/
    DebugAssert("MigrRecord.cpp", 0x5Fu, "sbuf.ptr()"); /*0x1bed6*/
  v22 = v17; /*0x1bee4*/
  v4 = HiiLibReturnZero(*(_QWORD *)(a2 + 32)); /*0x1beec*/
  v5 = v4 * v2[5]; /*0x1befe*/
  v6 = *(_QWORD *)(a2 + 16); /*0x1bf02*/
  v7 = (unsigned int)v2[6] + ((unsigned __int64)(unsigned int)v2[13] << 32); /*0x1bf0e*/
  v8 = v4; /*0x1bf14*/
  v9 = (unsigned int)v2[7] + ((unsigned __int64)(unsigned int)v2[14] << 32); /*0x1bf17*/
  v21 = v5; /*0x1bf1a*/
  if ( v5 ) /*0x1bf25*/
  {
    do /*0x1bff4*/
    {
      n23_1 = 0; /*0x1bf2b*/
      v11 = *(unsigned __int8 *)(v6 + 42); /*0x1bf2e*/
      if ( *(_BYTE *)(v6 + 42) ) /*0x1bf2e*/
      {
        do /*0x1bfcc*/
        {
          n23 = 23; /*0x1bf4b*/
          if ( n23_1 < 0x18u ) /*0x1bf54*/
            n23 = n23_1; /*0x1bf54*/
          v13 = *(_QWORD *)(v6 + 16 * (n23 + 7LL)); /*0x1bf78*/
          Assert_89(Source_16, v13, 40, v7, v8, v22); /*0x1bf7f*/
          sub_DC68(v6, n23_1); /*0x1bf8a*/
          Assert_89(Source_16, v13, 42, v9, v8, v22); /*0x1bfa9*/
          sub_DC68(v6, n23_1); /*0x1bfb4*/
          --v11; /*0x1bfc1*/
          ++n23_1; /*0x1bfc5*/
        }
        while ( v11 ); /*0x1bfcc*/
        v5 = v21; /*0x1bfd2*/
      }
      v14 = 1; /*0x1bfda*/
      ++v7; /*0x1bfdf*/
      ++v9; /*0x1bfe2*/
      v5 -= v8; /*0x1bfe5*/
      v21 = v5; /*0x1bfe8*/
    }
    while ( v5 ); /*0x1bff4*/
    v2 = a1; /*0x1bffa*/
  }
  else
  {
    v14 = 1; /*0x1c004*/
  }
  if ( v2[3] ) /*0x1c009*/
  {
    v15 = v2[1]++ == -1; /*0x1c00f*/
  }
  else
  {
    v14 = -1; /*0x1c014*/
    v15 = --v2[1] == -1; /*0x1c01a*/
  }
  if ( v15 ) /*0x1c01d*/
    v2[12] += v14; /*0x1c01f*/
  return sub_17400(v17); /*0x1c034*/
}


// Function: MigrGetOffset @ 0x1c044 (0xd bytes)
// Index: 766/906

unsigned __int64 __fastcall MigrGetOffset(unsigned int *a1)
{
  return *a1 + ((unsigned __int64)a1[4] << 32); /*0x1c050*/
}


// Function: MigrGetNextPtr @ 0x1c054 (0x1c bytes)
// Index: 767/906

__int64 __fastcall MigrGetNextPtr(__int64 a1, char a2)
{
  __int64 result; // rax

  result = a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 80; /*0x1c058*/
  if ( a2 || *(_BYTE *)(a1 + 8) ) /*0x1c061*/
    result += 4LL * *(unsigned __int8 *)(a1 + 4LL * *(unsigned __int8 *)(a1 + 48) + 96) + 48; /*0x1c06a*/
  return result; /*0x1c06f*/
}