MiDbgReadWriteEnclaveUnaligned

INT64 __stdcall MiDbgReadWriteEnclaveUnaligned(
        PVOID EnclaveAddress,
        PVOID Buffer,
        UINT64 AmountToMove,
        UINT64 EnclaveIsSource){
  int v4; 
  unsigned int v5; 
  __int64 v7; 
  char *v8; 
  INT64 result; 
  unsigned int v10; 
  __int64 BytesTransferred[5]; 
  __int64 VirtualAddress; 
  VirtualAddress = 0i64;
  BytesTransferred[0] = 0i64;
  v4 = EnclaveIsSource;
  v5 = AmountToMove;
  v7 = (unsigned __int8)EnclaveAddress & 7;
  v8 = (char *)EnclaveAddress - v7;
  result = KeDebugReadEnclaveMemory((char *)EnclaveAddress - v7, &VirtualAddress, 8ui64, (UINT64 *)BytesTransferred);
  v10 = result;
  if( (int)result >= 0 )
  {
    if( v4 )
    {
      memmove((UINT8 *)Buffer, (UINT8 *)&VirtualAddress + v7, v5);
    }
    else
    {
      memmove((UINT8 *)&VirtualAddress + v7, (UINT8 *)Buffer, v5);
      return(unsigned int)KeDebugWriteEnclaveMemory(v8, &VirtualAddress, 8ui64, (UINT64 *)BytesTransferred);
    }
    return v10;
  }
  return result;
}

Referenced by:

MiDbgReadWriteEnclave