/* INCLUDES ******************************************************************/
#include <ntoskrnl.h>
-#include <internal/kdb.h>
#define NDEBUG
#include <internal/debug.h>
STATIC CONST struct { PCHAR Name; UCHAR Offset; UCHAR Size; } RegisterToTrapFrame[] =
{
{"eip", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Eip), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Eip)},
- {"eflags", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Eflags), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Eflags)},
+ {"eflags", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.EFlags), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.EFlags)},
{"eax", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Eax), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Eax)},
{"ebx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ebx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ebx)},
{"ecx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ecx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ecx)},
{"edx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edx)},
{"esi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Esi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Esi)},
{"edi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Edi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Edi)},
- {"esp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Esp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Esp)},
+ {"esp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.HardwareEsp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.HardwareEsp)},
{"ebp", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ebp), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ebp)},
- {"cs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Cs), 2 }, /* Use only the lower 2 bytes */
- {"ds", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ds), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ds)},
- {"es", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Es), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Es)},
- {"fs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Fs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Fs)},
- {"gs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Gs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Gs)},
- {"ss", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Ss), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Ss)},
+ {"cs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegCs), 2 }, /* Use only the lower 2 bytes */
+ {"ds", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegDs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegDs)},
+ {"es", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegEs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegEs)},
+ {"fs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegFs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegFs)},
+ {"gs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegGs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegGs)},
+ {"ss", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.HardwareSegSs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.HardwareSegSs)},
{"dr0", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr0), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr0)},
{"dr1", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr1), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr1)},
{"dr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr2)},
case RpnOpNop:
DbgPrint("NOP,");
break;
-
+
case RpnOpImmediate:
DbgPrint("0x%I64x,", Op->Data.Immediate);
break;
-
+
case RpnOpBinaryOperator:
if (Op->Data.BinaryOperator == RpnBinaryOperatorAdd)
DbgPrint("+,");
else
DbgPrint("UNKNOWN OP,");
break;
-
+
case RpnOpRegister:
DbgPrint("%s,", RegisterToTrapFrame[Op->Data.Register].Name);
break;
-
+
case RpnOpDereference:
DbgPrint("[%s],",
(Op->Data.DerefMemorySize == 1) ? ("byte") :
)
);
break;
-
+
default:
DbgPrint("\nUnsupported Type: %d\n", Op->Type);
ul = Stack->Sp;
p++;
CharacterOffset++;
}
-
+
/* Check for end of expression */
if (p[0] == '\0' || p[0] == ')' || p[0] == ']')
break;
{
/* Remember operator */
Operator = p++;
- OperatorOffset = CharacterOffset++;;
-
+ OperatorOffset = CharacterOffset++;
+
/* Pop operator (to get the right operator precedence) */
HavePoppedOperator = FALSE;
if (*Operator == '*' || *Operator == '/' || *Operator == '%')
/* Copy register name/memory size */
while (isspace(p[--i2]));
- i2 = min(i2 + 1, sizeof (Buffer) - 1);
+ i2 = min(i2 + 1, (INT)sizeof (Buffer) - 1);
strncpy(Buffer, p, i2);
Buffer[i2] = '\0';
*ErrOffset = CharacterOffset;
return FALSE;
}
-
+
p += i;
CharacterOffset += i;
goto get_operand;
/* Skip closing brace/bracket */
pend++;
-
+
CharacterOffset += pend - p;
p = pend;
}
IsComparativeOp = TRUE;
RpnOp.Data.BinaryOperator = RpnBinaryOperatorEquals;
break;
-
+
case '!':
ASSERT(Operator[1] == '=');
IsComparativeOp = TRUE;
}
}
}
-
+
First = FALSE;
}
-
+
//end_of_expression:
if (ComparativeOpFilled && !RpnpPushStack(Stack, &ComparativeOp))
if (End != NULL)
*End = p;
-
+
return TRUE;
}
case RpnOpNop:
/* No operation */
break;
-
+
case RpnOpImmediate:
if (ValueStackPointer == RPN_VALUE_STACK_SIZE)
{
*ErrOffset = -1;
return FALSE;
}
-
+
*Result = ValueStack[0];
return TRUE;
}
OUT PCHAR ErrMsg OPTIONAL)
{
PRPN_STACK Stack = (PRPN_STACK)&RpnStack;
-
+
ASSERT(Expression != NULL);
ASSERT(TrapFrame != NULL);
ASSERT(Result != NULL);
}
memcpy(NewStack, Stack, Size);
NewStack->Size = NewStack->Sp;
-
+
return NewStack;
}