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