diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h index fe83506..f322c41 100644 --- a/sdk/xtdk/amd64/ketypes.h +++ b/sdk/xtdk/amd64/ketypes.h @@ -133,6 +133,9 @@ #define KTRAP_FRAME_ALIGN 0x10 #define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME) +/* Return address size pushed by 'call' instruction */ +#define KRETURN_ADDRESS_SIZE 0x8 + /* Size of legacy 387 registers */ #define SIZE_OF_80387_REGISTERS 80 diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h index ccab6ff..14e65a4 100644 --- a/sdk/xtdk/i686/ketypes.h +++ b/sdk/xtdk/i686/ketypes.h @@ -162,6 +162,9 @@ /* Number of supported extensions */ #define MAXIMUM_SUPPORTED_EXTENSION 512 +/* Return address size pushed by 'call' instruction */ +#define KRETURN_ADDRESS_SIZE 0x4 + /* Size of 387 registers */ #define SIZE_OF_80387_REGISTERS 80 #define SIZE_OF_FX_REGISTERS 128 diff --git a/xtoskrnl/ke/amd64/krnlinit.c b/xtoskrnl/ke/amd64/krnlinit.c index b411f02..6054701 100644 --- a/xtoskrnl/ke/amd64/krnlinit.c +++ b/xtoskrnl/ke/amd64/krnlinit.c @@ -105,6 +105,6 @@ KepSwitchBootStack(IN ULONG_PTR Stack) "jmp KepStartKernel\n" : : "m" (Stack), - "i" (FLOATING_SAVE_AREA_SIZE | KEXCEPTION_FRAME_SIZE | KSWITCH_FRAME_SIZE), + "i" (FLOATING_SAVE_AREA_SIZE | KEXCEPTION_FRAME_SIZE | KSWITCH_FRAME_SIZE | KRETURN_ADDRESS_SIZE), "p" (KepStartKernel)); } diff --git a/xtoskrnl/ke/i686/krnlinit.c b/xtoskrnl/ke/i686/krnlinit.c index 4a3b69d..900cb54 100644 --- a/xtoskrnl/ke/i686/krnlinit.c +++ b/xtoskrnl/ke/i686/krnlinit.c @@ -106,7 +106,7 @@ KepSwitchBootStack(IN ULONG_PTR Stack) "jmp _KepStartKernel@0\n" : : "m" (Stack), - "i" (KTRAP_FRAME_ALIGN | KTRAP_FRAME_SIZE | NPX_FRAME_SIZE), + "i" (KTRAP_FRAME_ALIGN | KTRAP_FRAME_SIZE | NPX_FRAME_SIZE | KRETURN_ADDRESS_SIZE), "i" (CR0_EM | CR0_MP | CR0_TS), "p" (KepStartKernel)); }