Newer
Older
AMI-Aptio-BIOS-Reversed / RegAccessPeim / decompiled / RegAccessValidateRange.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Init
// RegAccessValidateRange - addr:0xffdaf121
unsigned int __usercall RegAccessValidateRange@<eax>(unsigned int n0xC@<edx>, __int64 a2, int a3, int a4)
{
  int v5; // edi
  unsigned int v6; // esi
  bool v7; // cc
  int n4; // eax
  unsigned __int64 v9; // rax
  __int64 v10; // rax

  if ( !a4 || n0xC >= 0xC )
    return -2147483646;
  if ( n0xC - 4 > 3 )
    v5 = a3;
  else
    v5 = 1;
  v6 = n0xC & 3;
  if ( (a2 & ((unsigned __int8)byte_FFDB05E0[v6] - 1)) != 0 )
    return -2147483645;
  if ( !v5 )
  {
    if ( !HIDWORD(a2) )
    {
      v7 = 1;
      goto LABEL_12;
    }
    return -2147483645;
  }
  v9 = InternalRShift64(0xFFFFFFFF);
  if ( v9 < (unsigned int)(v5 - 1) )
    return -2147483645;
  v10 = InternalLShift64(v9 - (unsigned int)v5 + 1);
  if ( HIDWORD(a2) < HIDWORD(v10) )
    goto LABEL_13;
  if ( HIDWORD(a2) > HIDWORD(v10) )
    return -2147483645;
  v7 = (unsigned int)a2 <= (unsigned int)v10;
LABEL_12:
  if ( !v7 )
    return -2147483645;
LABEL_13:
  LOBYTE(n4) = byte_FFDB05E0[v6];
  if ( (unsigned __int8)n4 <= 4u )
    n4 = (unsigned __int8)n4;
  else
    n4 = 4;
  return (a4 & (n4 - 1)) != 0 ? 0x80000003 : 0;
}