KdpSendWaitContinue
KCONTINUE_STATUS __fastcall KdpSendWaitContinue(
UINT64 OutPacketType,
_STRING *OutMessageHeader,
_STRING *OutMessageData,
_CONTEXT *ContextRecord){
int v7;
_CONTEXT *v8;
__int128 *v9;
INT64 *v10;
UINT8 v11;
KCONTINUE_STATUS result;
ULONG_PTR BugCheckParameter4;
UINT64 *ActualSize;
INT64 a2[2];
int v16;
UINT64 Data;
UINT64 v18;
_QWORD v19[2];
UINT64 Actual;
UINT64 v21;
__int128 v22;
_QWORD v23[2];
_QWORD v24[2];
_QWORD v25[2];
_QWORD v26[2];
_QWORD v27[2];
_QWORD v28[2];
_QWORD v29[2];
_QWORD v30[2];
_QWORD v31[2];
_QWORD v32[2];
_QWORD v33[2];
_QWORD v34[2];
INT64 v35[2];
PVOID BaseAddress[2];
__int128 Buffer;
__int64 v38;
v38 = 0i64;
v19[0] = 3670016i64;
a2[0] = 0x10000000i64;
v16 = 0;
KdpContextSent = 0;
v19[1] = v35;
a2[1] = (INT64)KdpMessageBuffer;
*(_OWORD *)v35 = 0i64;
*(_OWORD *)BaseAddress = 0i64;
Buffer = 0i64;
KdSendPacket(7i64, OutMessageHeader, OutMessageData, &KdpContext);
while( !(_BYTE)KdDebuggerNotPresent )
{
while( 1 )
{
if( (_DWORD)KeNumberProcessors_0 == 1 )
KeQueryPerformanceCounter(0i64);
v7 = KdReceivePacket(2i64, v19, a2, &v16, &KdpContext);
if( v7 == 2 )
break;
if( v7 != 1 )
{
switch( LODWORD(v35[0]) )
{
case 0x3130:
KdpReadVirtualMemory((INT64)v35, (INT64)a2, (UINT64)v8);
continue;
case 0x3131:
LODWORD(BugCheckParameter4) = 5;
v22 = 0i64;
LODWORD(v35[1]) = KdpCopyMemoryChunks(
(UINT64)BaseAddress[0],
(PVOID)a2[1],
LOWORD(a2[0]),
0i64,
BugCheckParameter4,
(UINT64 *)((char *)&BaseAddress[1] + 4));
v9 = &v22;
v10 = 0i64;
LOWORD(v22) = 56;
*((_QWORD *)&v22 + 1) = v35;
goto LABEL_45;
case 0x3132:
v24[0] = 56i64;
v24[1] = v35;
KdpGetContext((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, ContextRecord);
if( !LODWORD(v35[1]) )
KdpContextSent = 1;
v9 = (__int128 *)v24;
goto LABEL_44;
case 0x3133:
KdpSetContext((INT64)v35, (UINT16 *)a2, ContextRecord);
continue;
case 0x3134:
v25[0] = 56i64;
v25[1] = v35;
LODWORD(BaseAddress[1]) = KdpAddBreakpoint(BaseAddress[0], 0xCCui64, 1u, 0);
v9 = (__int128 *)v25;
LODWORD(v35[1]) = LODWORD(BaseAddress[1]) == 0 ? 0xC0000001 : 0;
v10 = 0i64;
goto LABEL_45;
case 0x3135:
v26[0] = 56i64;
v26[1] = v35;
v11 = KdpDeleteBreakpoint(LODWORD(BaseAddress[0]));
v9 = (__int128 *)v26;
LODWORD(v35[1]) = v11 == 0 ? 0xC0000001 : 0;
v10 = 0i64;
goto LABEL_45;
case 0x3136:
return SLODWORD(BaseAddress[0]) >= 0;
case 0x3137:
KdpReadControlSpace((INT64)v35, (INT64)a2, (UINT64)v8);
continue;
case 0x3138:
KdpWriteControlSpace((INT64)v35, (UINT16 *)a2, (UINT64)v8);
continue;
case 0x3139:
HIDWORD(BaseAddress[1]) = 0;
v27[0] = 56i64;
v27[1] = v35;
LODWORD(ActualSize) = BaseAddress[1];
LODWORD(v35[1]) = KdpSysReadIoSpace(
Isa,
0i64,
1ui64,
(UINT64)BaseAddress[0],
(char *)&BaseAddress[1] + 4,
(UINT64)ActualSize,
&Actual);
v9 = (__int128 *)v27;
v10 = 0i64;
goto LABEL_45;
case 0x313A:
v28[0] = 56i64;
v28[1] = v35;
LODWORD(ActualSize) = BaseAddress[1];
LODWORD(v35[1]) = KdpSysWriteIoSpace(
Isa,
0i64,
1ui64,
(UINT64)BaseAddress[0],
(char *)&BaseAddress[1] + 4,
(UINT64)ActualSize,
(UINT64 *)((char *)&Actual + 4));
v9 = (__int128 *)v28;
v10 = 0i64;
goto LABEL_45;
case 0x313B:
KiResumeForReboot = 1;
KdExitDebugger(0);
((void(__fastcall *)(_QWORD))off_140C008A8[0])(0i64);
HalReturnToFirmware(3);
case 0x313C:
if( SLODWORD(BaseAddress[0]) < 0 )
return 0;
KdpGetStateChange((INT64)v35, (INT64)ContextRecord);
return 1;
case 0x313D:
KdpReadPhysicalMemory((INT64)v35, (INT64)a2, (UINT64)v8, (INT64)&KdpContext);
continue;
case 0x313E:
KdpWritePhysicalMemory((INT64)v35, (INT64)a2);
continue;
case 0x3140:
case 0x3141:
case 0x3142:
case 0x315A:
continue;
case 0x3144:
v29[0] = 56i64;
v29[1] = v35;
LODWORD(ActualSize) = BaseAddress[0];
DWORD2(Buffer) = 0;
LODWORD(v35[1]) = KdpSysReadIoSpace(
SHIDWORD(BaseAddress[0]),
LODWORD(BaseAddress[1]),
HIDWORD(BaseAddress[1]),
Buffer,
(char *)&Buffer + 8,
(UINT64)ActualSize,
&v21);
v9 = (__int128 *)v29;
v10 = 0i64;
goto LABEL_45;
case 0x3145:
v30[0] = 56i64;
v30[1] = v35;
LODWORD(ActualSize) = BaseAddress[0];
LODWORD(v35[1]) = KdpSysWriteIoSpace(
SHIDWORD(BaseAddress[0]),
LODWORD(BaseAddress[1]),
HIDWORD(BaseAddress[1]),
Buffer,
(char *)&Buffer + 8,
(UINT64)ActualSize,
(UINT64 *)((char *)&v21 + 4));
v9 = (__int128 *)v30;
v10 = 0i64;
goto LABEL_45;
case 0x3146:
LODWORD(v35[1]) = 0;
LODWORD(v35[0]) = 12614;
v33[0] = 56i64;
v33[1] = v35;
v9 = (__int128 *)v33;
Buffer = xmmword_140C0F398;
v10 = 0i64;
*(_OWORD *)BaseAddress = KdVersionBlock;
v38 = qword_140C0F3A8;
goto LABEL_45;
case 0x3147:
if( !(unsigned int)KdpWriteBreakPointEx(v35, (UINT16 *)a2) )
continue;
return 0;
case 0x3148:
KdpRestoreBreakPointEx((INT64)v35, (UINT16 *)a2);
continue;
case 0x3149:
KdExitDebugger(0);
KeBugCheckEx(0xE2u, 0i64, 0i64, 0i64, 0i64);
return result;
case 0x3150:
return KeSwitchFrozenProcessor(HIWORD(v35[0]));
case 0x3151:
LODWORD(v35[1]) = -1073741823;
v9 = (__int128 *)v34;
v34[0] = 56i64;
v10 = 0i64;
v34[1] = v35;
goto LABEL_45;
case 0x3152:
Data = 0i64;
v31[0] = 56i64;
v31[1] = v35;
LODWORD(v35[1]) = KdpSysReadMsr(LODWORD(BaseAddress[0]), &Data);
v9 = (__int128 *)v31;
v10 = 0i64;
*(PVOID *)((char *)BaseAddress + 4) = (PVOID)Data;
goto LABEL_45;
case 0x3153:
v32[0] = 56i64;
v32[1] = v35;
v18 = *(UINT64 *)((char *)BaseAddress + 4);
LODWORD(v35[1]) = KdpSysWriteMsr(LODWORD(BaseAddress[0]), &v18);
v9 = (__int128 *)v32;
v10 = 0i64;
goto LABEL_45;
case 0x3156:
KdpSearchMemory((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, v8);
continue;
case 0x3157:
KdpGetBusData(v35, (INT64)a2, (UINT64)v8);
continue;
case 0x3158:
KdpSetBusData((PSTR)v35, (PSTR)a2, (UINT64)v8);
continue;
case 0x3159:
v23[0] = 56i64;
v23[1] = v35;
if( KdpSearchInProgress )
KdpSearchPhysicalPageRange(4ui64);
LODWORD(v35[1]) = 0;
v9 = (__int128 *)v23;
v10 = 0i64;
goto LABEL_45;
case 0x315B:
KdpFillMemory((INT64)v35, (INT64)a2);
continue;
case 0x315C:
KdpQueryMemory((INT64)v35);
continue;
case 0x315F:
KdpGetContextEx((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)a2, ContextRecord);
continue;
case 0x3160:
KdpSetContextEx((INT64)v35, (INT64)a2, ContextRecord);
continue;
case 0x3161:
KdpWriteCustomBreakpoint((_DBGKD_MANIPULATE_STATE64 *)v35, (_STRING *)0x140000000i64, v8);
continue;
case 0x3162:
KdpReadPhysicalMemoryLong((INT64)v35, a2, (UINT64)v8);
continue;
default:
LOWORD(a2[0]) = 0;
v9 = (__int128 *)v19;
LODWORD(v35[1]) = -1073741823;
LABEL_44:
v10 = a2;
LABEL_45:
KdSendPacket(2i64, v9, v10, &KdpContext);
continue;
}
}
}
KdSendPacket(7i64, OutMessageHeader, OutMessageData, &KdpContext);
}
return 1;
}Referenced by:
KdpReportCommandStringStateChange
KdpReportExceptionStateChange
KdpReportLoadSymbolsStateChange