-
Notifications
You must be signed in to change notification settings - Fork 67
/
setjmp-Windows-wrapper-X64.S
68 lines (63 loc) · 1.64 KB
/
setjmp-Windows-wrapper-X64.S
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
.model flat,stdcall ; Flat memory model
option casemap:none ; Treat labels as case-sensitive
.code
_start:
__setjmp_wrapper PROC
movq (%rsp), %rdx # rta
movq %gs:0, %rax # SEH registration
movq %rax, 0(%rcx)
movq %rbx, 8(%rcx)
movq %rsp, 16(%rcx)
movq %rbp, 24(%rcx)
movq %rsi, 32(%rcx)
movq %rdi, 40(%rcx)
movq %r12, 48(%rcx)
movq %r13, 56(%rcx)
movq %r14, 64(%rcx)
movq %r15, 72(%rcx)
movq %rdx, 80(%rcx) # %rip
movq %rax, 88(%rcx)
movaps %xmm6, 96(%rcx)
movaps %xmm7, 112(%rcx)
movaps %xmm8, 128(%rcx)
movaps %xmm9, 144(%rcx)
movaps %xmm10,160(%rcx)
movaps %xmm11,176(%rcx)
movaps %xmm12,192(%rcx)
movaps %xmm13,208(%rcx)
movaps %xmm14,224(%rcx)
movaps %xmm15,240(%rcx)
xor %rax, %rax # return 0
ret
__setjmp_wrapper ENDP
__longjmp_wrapper PROC
movq 0(%rcx), %rax
movq 8(%rcx), %rbx
movq 16(%rcx), %rsp
movq 24(%rcx), %rbp
movq 32(%rcx), %rsi
movq 40(%rcx), %rdi
movq 48(%rcx), %r12
movq 56(%rcx), %r13
movq 64(%rcx), %r14
movq 72(%rcx), %r15
movq 80(%rcx), %r8
movaps 96(%rcx), %xmm6
movaps 112(%rcx), %xmm7
movaps 128(%rcx), %xmm8
movaps 144(%rcx), %xmm9
movaps 160(%rcx), %xmm10
movaps 176(%rcx), %xmm11
movaps 192(%rcx), %xmm12
movaps 208(%rcx), %xmm13
movaps 224(%rcx), %xmm14
movaps 240(%rcx), %xmm15
movq %rax, %gs:0 # SEH registration
movl %edx, %eax
test %eax, %eax
jne a
inc %eax
a: movq %r8, (%rsp)
ret
__longjmp_wrapper ENDP
END _start