Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / ProcessSetupConfig.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
// ProcessSetupConfig - decompiled from Platform.efi
unsigned __int64 __fastcall ProcessSetupConfig(unsigned __int16 *Buffer)
{
  const CHAR16 *Buffer_1; // rbx
  unsigned __int64 v2; // rdi
  __int16 n48; // r8
  CHAR16 n88; // cx
  __int64 SetupVarSize; // rax
  __int64 v7; // r9
  __int64 v8; // [rsp+30h] [rbp+8h]

  Buffer_1 = Buffer; /*0x5812*/
  if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x5818*/
    Assert( /*0x582d*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      1006,
      (__int64)"((UINTN) String & 0x00000001) == 0");
  v2 = 0; /*0x5832*/
  if ( !Buffer_1 ) /*0x5837*/
  {
    Assert((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 1011, (__int64)"(String != ((void *) 0))"); /*0x584c*/
    return v8; /*0x5851*/
  }
  if ( StrLen(Buffer_1) > 0xF4240 ) /*0x5877*/
    Assert( /*0x588c*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      1018,
      (__int64)"(StrnLenS (String, (_gPcd_FixedAtBuild_PcdMaximumUnicodeStringLength) + 1) <= (_gPcd_FixedAtBuild_PcdMaxi"
               "mumUnicodeStringLength))");
  if ( StrLen(Buffer_1) > 0xF4240 ) /*0x58a4*/
    return v8; /*0x58a4*/
  while ( *Buffer_1 == 32 || *Buffer_1 == 9 ) /*0x58b0*/
    ++Buffer_1; /*0x58b2*/
  n48 = 48; /*0x58b8*/
  while ( *Buffer_1 == 48 ) /*0x58c7*/
    ++Buffer_1; /*0x58bf*/
  n88 = *Buffer_1; /*0x58c9*/
  if ( (unsigned __int16)(*Buffer_1 - 97) <= 0x19u ) /*0x58d3*/
    n88 -= 32; /*0x58d5*/
  if ( n88 == 88 ) /*0x58dd*/
  {
    if ( *(Buffer_1 - 1) == 48 ) /*0x58e4*/
    {
      ++Buffer_1; /*0x58ea*/
      goto LABEL_21; /*0x58ea*/
    }
  }
  else
  {
LABEL_21:
    while ( (unsigned __int16)(*Buffer_1 - n48) <= 9u /*0x5917*/
         || (unsigned __int16)(*Buffer_1 - 65) <= 5u
         || (unsigned __int16)(*Buffer_1 - 97) <= 5u )
    {
      SetupVarSize = GetSetupVarSize(*Buffer_1); /*0x5920*/
      if ( v2 > (unsigned __int64)(v7 - SetupVarSize) >> 4 ) /*0x5932*/
        return v7; /*0x5944*/
      v2 = SetupVarSize + 16 * v2; /*0x5938*/
      ++Buffer_1; /*0x593b*/
    }
  }
  return v2; /*0x585e*/
}