From 3a3562b6cd519c25f2a4d1bba47981d83f3a48d9 Mon Sep 17 00:00:00 2001 From: Artur Augustyniak Date: Sat, 15 Apr 2017 22:25:37 +0200 Subject: [PATCH] fixed 64 bit linux unaligned stack crash and printf params repetition 6 and more --- asmloader.c | 2 +- stubs/x86_32_stub.c | 136 ++++++++++++------------ stubs/x86_64_linux_stub | Bin 512 -> 1024 bytes stubs/x86_64_linux_stub.c | 200 +++++++++++++++++++++++------------ stubs/x86_64_linux_stub.nasm | 79 ++++++++++++-- stubs/x86_64_mswin_stub.c | 136 ++++++++++++------------ 6 files changed, 341 insertions(+), 212 deletions(-) diff --git a/asmloader.c b/asmloader.c index a68c236..563c787 100644 --- a/asmloader.c +++ b/asmloader.c @@ -132,7 +132,7 @@ # error Unsupported or unrecognized architecture. #endif -#define STUB_SIZE 0x200 +#define STUB_SIZE 0x400 #define STUB_PAD 1 typedef int (*func_t)(); diff --git a/stubs/x86_32_stub.c b/stubs/x86_32_stub.c index 9519c1a..d5541fc 100644 --- a/stubs/x86_32_stub.c +++ b/stubs/x86_32_stub.c @@ -1,68 +1,68 @@ -#pragma once - -unsigned char STUB_x86_32_stub[] = { - 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0x89, 0xd9, 0xe9, - 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; +#pragma once + +unsigned char STUB_x86_32_stub[] = { + 0xbb, 0xcc, 0xcc, 0xcc, 0xcc, 0x89, 0xd9, 0xe9, + 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/stubs/x86_64_linux_stub b/stubs/x86_64_linux_stub index 556d9d8f083b123fde2dd7d185c4cc352686a3e0..e46fbcc13a44c93733f5ec5000ff5f835e1e509c 100644 GIT binary patch literal 1024 zcmd_myGjHx6b9hzt_#CLK#&0yTr4sm*k}>3Fv5Z?XEln2m5nc9X=fF};uH7;K7rkU zf|aFgCteE?JMReb&*419nt}g23CYRK&~Wa%p%e}EY*VS{*B0t{Xo^&IFsI-aGrUqN zF5L_`Pt^~OCHsqfDMaOEe{gTPX|V51`N8N<;6wY1(fQuJ-agJGRD&?0xN0aKn1bT2 znWX5=w2$j%-lJN;tK4E6dfqYRJ)<80dOkAxDK8#fEYWh^OQU43F;DiA^NjP9^Mvyl zNzoBw2TZxa=uO~b+cSELaoZqOJIHYvQ}q>(uDBwuiG5M2n>s%Yu_?C132|Kh%YXTf EKf0QUr2qf` literal 512 zcmeb1mHo-Uz~Ir#E5*pb@bWE?@aV2l;rOr01!8vEYQsfD8Nf_iNg#Fjzv?fbw*RJo zfaGfqC=F8o8)RB1Slpvi^e>pl`wvL@bh7>jQ@kK^q9QyXe2>lx9^E!79^EA>93I^v zDgqweJ}MGE-7YE$K0ubnf1tGOGLSLdrpv*U=n62!yAottH|r`e#k(3v{a0NJBuN6o o2hM_l9F(?z(soeV4N5aG+&ch*j8K{hN;5-g7AQ@U<%2*m0H< + mov [rel saved_r15], r15 mov [rel saved_rdi], rdi mov [rel saved_rsi], rsi mov [rel saved_rdx], rdx @@ -45,9 +46,9 @@ vaarg_converter: mov [rel saved_r9], r9 pop rdx ; Function to be called. - pop rax ; Return address. - mov [rel saved_ret], rax - mov rax, rdx + pop r15 ; Return address. + mov [rel saved_ret], r15 + mov r15, rdx mov rdi, [rsp+8*0] mov rsi, [rsp+8*1] @@ -56,7 +57,58 @@ vaarg_converter: mov r8, [rsp+8*4] mov r9, [rsp+8*5] - call rax + ; remove args passed via registers from stack to avoid printing + ; them twice in case of more than 6 printf arguments + ; no easy way to detect exact number of arguments so we have to save the stack + ; to rebuild it in case of less then 6 params + mov [rel saved_stack_top], rdi + mov [rel saved_stack_nd], rsi + mov [rel saved_stack_rd], rdx + mov [rel saved_stack_fourth], rcx + mov [rel saved_stack_fifth], r8 + mov [rel saved_stack_sixth], r9 + add rsp, 48 + + ; When calling printf stub uses rax, so this register is nonzero. + ; This causes printf to "see" floating point arguments and starts using SSE. + ; At the same time if the stack does not have the proper 16 byte alignment asmloader will crash. + ; After first [rbx + 3 * 8] call rax may be nonzero again + ; so code like: + ; + ; [bits 64] + ; + ; call no_arg_procedure + ; + ; push 0 + ; call [rbx + 0 * 8] + ; + ; no_arg_procedure: ; no_arg_procedure() + ; + ; call _print + ; db "abc", 0xa, 0 + ; _print: + ; call [rbx + 3 * 8] + ; add rsp, 8 + ; + ; call _print2 + ; db "cde", 0xa, 0 + ; _print2: + ; call [rbx + 3 * 8] + ; add rsp, 8 + ; ret + ; ;end + ; + ; will leave stack unaligned and nonzero rax, this will crash, so: + xor rax, rax + call r15 + + ; restore 6 stack elements + push QWORD [rel saved_stack_sixth] + push QWORD [rel saved_stack_fifth] + push QWORD [rel saved_stack_fourth] + push QWORD [rel saved_stack_rd] + push QWORD [rel saved_stack_nd] + push QWORD [rel saved_stack_top] mov rdi, [rel saved_rdi] mov rsi, [rel saved_rsi] @@ -64,10 +116,15 @@ vaarg_converter: mov rcx, [rel saved_rcx] mov r8, [rel saved_r8] mov r9, [rel saved_r9] + + + ; r12, r13, r14, r15, rbx, rsp, rbp are the callee-saved registers - they have a + ; "Yes" in the "Preserved across function calls" column. + mov r15, [rel saved_r15] jmp [rel saved_ret] ; Attempt to move out the data part to another cache-line. -times (0x100 - ($ - start)) db 0x00 +times (0x200 - ($ - start)) db 0x00 jump_table: dq stub_exit @@ -90,10 +147,18 @@ storage_area: saved_rcx: dq 0 saved_r8: dq 0 saved_r9: dq 0 + saved_r15: dq 0 saved_ret: dq 0 - + ; space for saving 6 params taken off the stack + saved_stack_top: dq 0 + saved_stack_nd: dq 0 + saved_stack_rd: dq 0 + saved_stack_fourth: dq 0 + saved_stack_fifth: dq 0 + saved_stack_sixth: dq 0 + ; Align to STUB_SIZE. -times (0x200 - ($ - start)) db 0x0 +times (0x400 - ($ - start)) db 0x0 real_start: diff --git a/stubs/x86_64_mswin_stub.c b/stubs/x86_64_mswin_stub.c index e310435..d6a2a81 100644 --- a/stubs/x86_64_mswin_stub.c +++ b/stubs/x86_64_mswin_stub.c @@ -1,68 +1,68 @@ -#pragma once - -unsigned char STUB_x86_64_mswin_stub[] = { - 0x48, 0x8d, 0x1d, 0xf9, 0x00, 0x00, 0x00, 0x48, - 0x8d, 0x0d, 0x1a, 0x01, 0x00, 0x00, 0xe9, 0xed, - 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x08, - 0x48, 0x83, 0xec, 0x20, 0xff, 0x25, 0x06, 0x01, - 0x00, 0x00, 0x51, 0x48, 0x8b, 0x4c, 0x24, 0x08, - 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xfe, 0x00, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x59, 0xc3, - 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xf6, 0x00, - 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0xc3, 0xff, - 0x35, 0xf3, 0x00, 0x00, 0x00, 0xeb, 0x08, 0xff, - 0x35, 0xf3, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x48, - 0x89, 0x0d, 0xf2, 0x00, 0x00, 0x00, 0x48, 0x89, - 0x15, 0xf3, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x05, - 0xf4, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x0d, 0xf5, - 0x00, 0x00, 0x00, 0x5a, 0x58, 0x48, 0x89, 0x05, - 0xf4, 0x00, 0x00, 0x00, 0x48, 0x89, 0xd0, 0x48, - 0x8b, 0x0c, 0x24, 0x48, 0x8b, 0x54, 0x24, 0x08, - 0x4c, 0x8b, 0x44, 0x24, 0x10, 0x4c, 0x8b, 0x4c, - 0x24, 0x18, 0x48, 0x89, 0x15, 0xdf, 0x00, 0x00, - 0x00, 0x4c, 0x89, 0x05, 0xe0, 0x00, 0x00, 0x00, - 0x4c, 0x89, 0x0d, 0xe1, 0x00, 0x00, 0x00, 0xff, - 0xd0, 0x48, 0x8b, 0x15, 0xc8, 0x00, 0x00, 0x00, - 0x4c, 0x8b, 0x05, 0xc9, 0x00, 0x00, 0x00, 0x4c, - 0x8b, 0x0d, 0xca, 0x00, 0x00, 0x00, 0x48, 0x89, - 0x54, 0x24, 0x08, 0x4c, 0x89, 0x44, 0x24, 0x10, - 0x4c, 0x89, 0x4c, 0x24, 0x18, 0x48, 0x8b, 0x0d, - 0x7c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x15, 0x7d, - 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x05, 0x7e, 0x00, - 0x00, 0x00, 0x4c, 0x8b, 0x0d, 0x7f, 0x00, 0x00, - 0x00, 0xff, 0x25, 0x81, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x13, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0x22, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0x38, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0x47, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0x4f, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, - 0x00, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, - 0x01, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, - 0x02, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, - 0x03, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, - 0x04, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 -}; +#pragma once + +unsigned char STUB_x86_64_mswin_stub[] = { + 0x48, 0x8d, 0x1d, 0xf9, 0x00, 0x00, 0x00, 0x48, + 0x8d, 0x0d, 0x1a, 0x01, 0x00, 0x00, 0xe9, 0xed, + 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x08, + 0x48, 0x83, 0xec, 0x20, 0xff, 0x25, 0x06, 0x01, + 0x00, 0x00, 0x51, 0x48, 0x8b, 0x4c, 0x24, 0x08, + 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xfe, 0x00, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0x59, 0xc3, + 0x48, 0x83, 0xec, 0x20, 0xff, 0x15, 0xf6, 0x00, + 0x00, 0x00, 0x48, 0x83, 0xc4, 0x20, 0xc3, 0xff, + 0x35, 0xf3, 0x00, 0x00, 0x00, 0xeb, 0x08, 0xff, + 0x35, 0xf3, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x48, + 0x89, 0x0d, 0xf2, 0x00, 0x00, 0x00, 0x48, 0x89, + 0x15, 0xf3, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x05, + 0xf4, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x0d, 0xf5, + 0x00, 0x00, 0x00, 0x5a, 0x58, 0x48, 0x89, 0x05, + 0xf4, 0x00, 0x00, 0x00, 0x48, 0x89, 0xd0, 0x48, + 0x8b, 0x0c, 0x24, 0x48, 0x8b, 0x54, 0x24, 0x08, + 0x4c, 0x8b, 0x44, 0x24, 0x10, 0x4c, 0x8b, 0x4c, + 0x24, 0x18, 0x48, 0x89, 0x15, 0xdf, 0x00, 0x00, + 0x00, 0x4c, 0x89, 0x05, 0xe0, 0x00, 0x00, 0x00, + 0x4c, 0x89, 0x0d, 0xe1, 0x00, 0x00, 0x00, 0xff, + 0xd0, 0x48, 0x8b, 0x15, 0xc8, 0x00, 0x00, 0x00, + 0x4c, 0x8b, 0x05, 0xc9, 0x00, 0x00, 0x00, 0x4c, + 0x8b, 0x0d, 0xca, 0x00, 0x00, 0x00, 0x48, 0x89, + 0x54, 0x24, 0x08, 0x4c, 0x89, 0x44, 0x24, 0x10, + 0x4c, 0x89, 0x4c, 0x24, 0x18, 0x48, 0x8b, 0x0d, + 0x7c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x15, 0x7d, + 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x05, 0x7e, 0x00, + 0x00, 0x00, 0x4c, 0x8b, 0x0d, 0x7f, 0x00, 0x00, + 0x00, 0xff, 0x25, 0x81, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x13, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x22, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x38, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x47, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x4f, 0xc0, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0x00, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, + 0x01, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, + 0x02, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, + 0x03, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, + 0x04, 0x00, 0xde, 0xc0, 0xde, 0xc0, 0xde, 0xc0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +};