Newer
Older
AMI-Aptio-BIOS-Reversed / Platform / SetupDisplayStrings.c
@Ajax Dong Ajax Dong 2 days ago 2 KB Init
// SetupDisplayStrings - decompiled from Platform.efi
unsigned __int64 __fastcall SetupDisplayStrings(CHAR16 *Buffer, __int64 a2, const CHAR16 *Buffer_2)
{
  CHAR16 *Buffer_1; // rbx
  const char *(Destination____((void__)_0)); // r8
  __int64 n326; // rdx
  UINTN n4; // rsi
  CHAR16 v9; // ax
  char *v10; // rdi

  Buffer_1 = Buffer; /*0x5067*/
  if ( ((unsigned __int8)Buffer & 1) != 0 ) /*0x506d*/
    Assert( /*0x507e*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      320,
      (__int64)"((UINTN) Destination & 0x00000001) == 0");
  if ( ((unsigned __int8)Buffer_2 & 1) != 0 ) /*0x5087*/
    Assert( /*0x5098*/
      (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
      321,
      (__int64)"((UINTN) Source & 0x00000001) == 0");
  if ( !Buffer_1 ) /*0x50a2*/
  {
    (Destination____((void__)_0)) = "(Destination != ((void *) 0))"; /*0x50a4*/
    n326 = 326; /*0x50ab*/
LABEL_7:
    Assert((__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", n326, (__int64)(Destination____((void__)_0))); /*0x50b0*/
    return 0x8000000000000002uLL; /*0x50c2*/
  }
  if ( !Buffer_2 ) /*0x50ca*/
  {
    (Destination____((void__)_0)) = "(Source != ((void *) 0))"; /*0x50cc*/
    n326 = 327; /*0x50d3*/
    goto LABEL_7; /*0x50d8*/
  }
  n4 = StrLen(Buffer_2); /*0x50e7*/
  if ( n4 > 4 ) /*0x50f2*/
    n4 = 4; /*0x50f2*/
  if ( Buffer_2 > Buffer_1 ) /*0x50f9*/
    goto LABEL_15; /*0x50f9*/
  if ( Buffer_1 >= &Buffer_2[n4 + 1] ) /*0x5106*/
  {
    if ( Buffer_1 > Buffer_2 ) /*0x510b*/
      goto LABEL_18; /*0x510b*/
LABEL_15:
    if ( Buffer_2 >= Buffer_1 + 5 ) /*0x5114*/
      goto LABEL_17; /*0x5114*/
  }
  Assert( /*0x5116*/
    (__int64)"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
    356,
    (__int64)"InternalSafeStringNoStrOverlap (Destination, DestMax, (CHAR16 *)Source, SourceLen + 1)");
LABEL_17:
  if ( Buffer_2 > Buffer_1 ) /*0x512d*/
  {
LABEL_20:
    if ( Buffer_2 < Buffer_1 + 5 ) /*0x5148*/
      return 0x800000000000000FuLL; /*0x5148*/
    goto LABEL_22; /*0x5148*/
  }
LABEL_18:
  if ( Buffer_1 < &Buffer_2[n4 + 1] ) /*0x513a*/
    return 0x800000000000000FuLL; /*0x5154*/
  if ( Buffer_2 >= Buffer_1 ) /*0x513f*/
    goto LABEL_20; /*0x513f*/
LABEL_22:
  v9 = *Buffer_2; /*0x5156*/
  if ( *Buffer_2 ) /*0x5156*/
  {
    v10 = (char *)((char *)Buffer_2 - (char *)Buffer_1); /*0x515e*/
    do /*0x5177*/
    {
      if ( !n4 ) /*0x5164*/
        break; /*0x5164*/
      *Buffer_1 = v9; /*0x5166*/
      --n4; /*0x5169*/
      v9 = *(CHAR16 *)((char *)++Buffer_1 + (_QWORD)v10); /*0x5170*/
    }
    while ( v9 ); /*0x5177*/
  }
  *Buffer_1 = 0; /*0x5179*/
  return 0; /*0x5192*/
}