diff options
author | Alex Ionescu <aionescu@gmail.com> | 2017-03-15 04:52:49 +0300 |
---|---|---|
committer | Alex Ionescu <aionescu@gmail.com> | 2017-03-15 04:52:49 +0300 |
commit | 57b0e633538b67e03804caffb5d8c59227c68adf (patch) | |
tree | 625edc2cdca37eb38675b91f41963e3cbcde9eb5 | |
parent | 42dc94556b1e396251508989ed7168a7f219ade5 (diff) |
WIP: Redstone 2 fix
-rw-r--r-- | nt/shvos.c | 13 | ||||
-rw-r--r-- | nt/shvosx64.asm | 47 |
2 files changed, 47 insertions, 13 deletions
@@ -243,19 +243,6 @@ ShvOsRunCallbackOnProcessors ( KeGenericCallDpc(ShvOsDpcRoutine, &dpcContext); } -DECLSPEC_NORETURN -VOID -__cdecl -ShvOsRestoreContext ( - _In_ PCONTEXT ContextRecord - ) -{ - // - // Windows provides a nice OS function to do this - // - RtlRestoreContext(ContextRecord, NULL); -} - VOID ShvOsCaptureContext ( _In_ PCONTEXT ContextRecord diff --git a/nt/shvosx64.asm b/nt/shvosx64.asm index 1e75175..13d3b3e 100644 --- a/nt/shvosx64.asm +++ b/nt/shvosx64.asm @@ -44,4 +44,51 @@ include ksamd64.inc ret ; return LEAF_END __lgdt, _TEXT$00 + LEAF_ENTRY ShvOsRestoreContext , _TEXT$00 + + movaps xmm0, xmmword ptr [rcx+1A0h] + movaps xmm1, xmmword ptr [rcx+1B0h] + movaps xmm2, xmmword ptr [rcx+1C0h] + movaps xmm3, xmmword ptr [rcx+1D0h] + movaps xmm4, xmmword ptr [rcx+1E0h] + movaps xmm5, xmmword ptr [rcx+1F0h] + movaps xmm6, xmmword ptr [rcx+200h] + movaps xmm7, xmmword ptr [rcx+210h] + movaps xmm8, xmmword ptr [rcx+220h] + movaps xmm9, xmmword ptr [rcx+230h] + movaps xmm10, xmmword ptr [rcx+240h] + movaps xmm11, xmmword ptr [rcx+250h] + movaps xmm12, xmmword ptr [rcx+260h] + movaps xmm13, xmmword ptr [rcx+270h] + movaps xmm14, xmmword ptr [rcx+280h] + movaps xmm15, xmmword ptr [rcx+290h] + ldmxcsr dword ptr [rcx+34h] + + mov rax, [rcx+78h] + mov rdx, [rcx+88h] + mov r8, [rcx+0B8h] + mov r9, [rcx+0C0h] + mov r10, [rcx+0C8h] + mov r11, [rcx+0D0h] + cli + + mov rbx, [rcx+90h] + mov rsi, [rcx+0A8h] + mov rdi, [rcx+0B0h] + mov rbp, [rcx+0A0h] + mov r12, [rcx+0D8h] + mov r13, [rcx+0E0h] + mov r14, [rcx+0E8h] + mov r15, [rcx+0F0h] + + push [rcx+44h] + popfq + + mov rsp, [rcx+98h] + push [rcx+0F8h] + + mov rcx, [rcx+80h] + ret + LEAF_END ShvOsRestoreContext, _TEXT$00 + end |