KdpSearchMemory

VOID __stdcall KdpSearchMemory(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData, _CONTEXT *Context){
  char *v3; 
  unsigned int CurrentSymbolEnd; 
  unsigned int v6; 
  unsigned __int64 TargetBaseAddress; 
  unsigned __int64 Dr7; 
  UINT64 v9; 
  unsigned int v10; 
  unsigned __int64 v11; 
  unsigned __int64 v12; 
  int v13; 
  __int64 v14; 
  __int64 v15; 
  char *v16; 
  unsigned int v17; 
  __int64 v18; 
  UINT64 Flags; 
  char v20[4]; 
  int Buffer; 
  unsigned int v22; 
  int v23; 
  char *v24; 
  int v25[2]; 
  _DBGKD_MANIPULATE_STATE64 *v26; 
  unsigned __int64 v27; 
  __int64 v28; 
  INT8 Destination[4]; 
  int v30; 
  int v31; 
  int v32; 
  int v33[4]; 

  v3 = AdditionalData->Buffer;
  CurrentSymbolEnd = m->u.Continue2.AnyControlSet.X86ControlSet.CurrentSymbolEnd;
  v6 = -1;
  TargetBaseAddress = m->u.ReadMemory.TargetBaseAddress;
  Dr7 = m->u.Continue2.ControlSet.Dr7;
  v25[1] = 0;
  Buffer = 0;
  v24 = v3;
  v27 = TargetBaseAddress + Dr7;
  v22 = CurrentSymbolEnd;
  v20[0] = 0;
  m->ReturnStatus = -2147483622;
  if( CurrentSymbolEnd <= 3 )
    v6 = 0xFFFFFFFF >> (8 * (4 - CurrentSymbolEnd));
  *(_DWORD *)Destination = 0;
  v33[0] = v6;
  v9 = 4i64;
  v33[1] = v6 << 8;
  v33[3] = v6 << 24;
  v33[2] = v6 << 16;
  if( CurrentSymbolEnd < 5 )
    v9 = CurrentSymbolEnd;
  KdpQuickMoveMemory(Destination, v3, v9);
  v10 = TargetBaseAddress & 3;
  v30 = *(_DWORD *)Destination << 8;
  v11 = TargetBaseAddress & 0xFFFFFFFFFFFFFFFCui64;
  v31 = *(_DWORD *)Destination << 16;
  v32 = *(_DWORD *)Destination << 24;
  if( v11 >= v12 )
    goto LABEL_22;
  while( 1 )
  {
    LODWORD(Flags) = 4;
    if( MmDbgCopyMemory(v11, &Buffer, 4ui64, 4ui64, Flags) >= 0 )
      break;
LABEL_18:
    v11 += 4i64;
    v10 = 0;
    if( v11 >= v27 )
      goto LABEL_22;
  }
  v13 = CurrentSymbolEnd - 4;
  v14 = v10;
  v23 = CurrentSymbolEnd - 4;
  while( (Buffer & v33[v14]) != *(_DWORD *)&Destination[v14 * 4] )
  {
LABEL_17:
    ++v10;
    ++v14;
    if( v10 >= 4 )
      goto LABEL_18;
  }
  v15 = v10;
  v28 = v10;
  if( 4 - v10 >= CurrentSymbolEnd )
    goto LABEL_21;
  v16 = &v3[-v10 + 4];
  v17 = v13 + v10;
  if( !(v13 + v10) )
    goto LABEL_21;
  v18 = v10 + v11 - (_QWORD)v24;
  do
  {
    LODWORD(Flags) = 4;
    if( MmDbgCopyMemory((UINT64)&v16[v18], v20, 1ui64, 1ui64, Flags) < 0 )
      break;
    if( v20[0] != *v16 )
      break;
    ++v16;
    --v17;
  }
  while( v17 );
  if( v17 )
  {
    CurrentSymbolEnd = v22;
    v3 = v24;
    v13 = v23;
    goto LABEL_17;
  }
  v15 = v28;
LABEL_21:
  m->ReturnStatus = 0;
  m->u.ReadMemory.TargetBaseAddress = v15 + v11;
LABEL_22:
  v25[0] = 3670072;
  v26 = m;
  KdSendPacket(2i64, v25, 0i64, &KdpContext);
}

Referenced by:

KdpSendWaitContinue