mirror of
https://gitlab.os-k.eu/os-k-team/kvisc.git
synced 2023-08-25 14:05:46 +02:00
memory, stack, dumping
This commit is contained in:
parent
b324b120fc
commit
7031207afb
@ -45,6 +45,11 @@ xchg r m
|
|||||||
xchg m r
|
xchg m r
|
||||||
xchg m i
|
xchg m i
|
||||||
|
|
||||||
|
push i
|
||||||
|
push r
|
||||||
|
|
||||||
|
pop r
|
||||||
|
|
||||||
cli
|
cli
|
||||||
sti
|
sti
|
||||||
|
|
||||||
|
@ -83,6 +83,36 @@ IMPL_START_2(xchg)
|
|||||||
}
|
}
|
||||||
IMPL_OUT;
|
IMPL_OUT;
|
||||||
|
|
||||||
|
IMPL_START_1(push)
|
||||||
|
{
|
||||||
|
if (ctx->r[RSP].val % 8 > 0 || ctx->r[RBP].val % 8 > 0) {
|
||||||
|
_except(ctx, E_STK, "Misaligned stack REGS");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->r[RSP].val > ctx->r[RBP].val) {
|
||||||
|
_except(ctx, E_STK, "RSP above RBP");
|
||||||
|
}
|
||||||
|
|
||||||
|
writemem64(ctx, v1, ctx->r[RSP]);
|
||||||
|
ctx->r[RSP].val -= 8;
|
||||||
|
}
|
||||||
|
IMPL_END;
|
||||||
|
|
||||||
|
IMPL_START_1(pop)
|
||||||
|
{
|
||||||
|
if (ctx->r[RSP].val % 8 > 0 || ctx->r[RBP].val % 8 > 0) {
|
||||||
|
_except(ctx, E_STK, "Misaligned stack REGS");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ctx->r[RSP].val >= ctx->r[RBP].val) {
|
||||||
|
_except(ctx, E_STK, "RBP above RSP");
|
||||||
|
}
|
||||||
|
|
||||||
|
v1 = readmem64(ctx, ctx->r[RSP]);
|
||||||
|
ctx->r[RSP].val += 8;
|
||||||
|
}
|
||||||
|
IMPL_OUT;
|
||||||
|
|
||||||
IMPL_START_0(cli)
|
IMPL_START_0(cli)
|
||||||
{
|
{
|
||||||
CHK_SUPERV();
|
CHK_SUPERV();
|
||||||
|
@ -106,6 +106,7 @@ enum
|
|||||||
E_ACC, // Invalid access
|
E_ACC, // Invalid access
|
||||||
E_SYS, // Supervisor only
|
E_SYS, // Supervisor only
|
||||||
E_ALI, // Alignment error
|
E_ALI, // Alignment error
|
||||||
|
E_STK, // Stack error
|
||||||
NEXCPTS
|
NEXCPTS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -7,11 +7,15 @@
|
|||||||
ushort fwprog[] = {
|
ushort fwprog[] = {
|
||||||
I_MOV_R_I, RBP, A_IMM32, FWSTACK>>16, FWSTACK&0xFF,
|
I_MOV_R_I, RBP, A_IMM32, FWSTACK>>16, FWSTACK&0xFF,
|
||||||
I_MOV_R_I, RSP, A_IMM32, FWSTACK>>16, FWSTACK&0xFF,
|
I_MOV_R_I, RSP, A_IMM32, FWSTACK>>16, FWSTACK&0xFF,
|
||||||
|
|
||||||
|
I_PUSH_I, A_IMM16, 0xDDEE,
|
||||||
|
|
||||||
|
/*
|
||||||
I_MOV_M_I, A_MEM, RBP, A_IMM16, 0xAC,
|
I_MOV_M_I, A_MEM, RBP, A_IMM16, 0xAC,
|
||||||
I_SUB_R_I, RBP, A_IMM16, 8,
|
I_SUB_R_I, RBP, A_IMM16, 8,
|
||||||
I_ADD_M_R, A_OFF, 8, RBP, RSP,
|
I_ADD_M_R, A_OFF, 8, RBP, RSP,
|
||||||
I_MOV_R_M, RAX, A_MEM, RBP,
|
I_MOV_R_M, RAX, A_MEM, RBP,
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
ushort bget(ctx_t *ctx)
|
ushort bget(ctx_t *ctx)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user