-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathASMStubs.asm
More file actions
81 lines (68 loc) · 1.39 KB
/
ASMStubs.asm
File metadata and controls
81 lines (68 loc) · 1.39 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
.data
.code
VM_Jmp PROC ; VM_Jmp(UINT callAddress) - ** This routine is not finished yet **
jmp rcx
VM_Jmp ENDP
; rcx = call addr
; rdx = num parameters
; r8 = parameter list
VM_Call PROC ; working for up to 4 parameters
push rax
push r11
push r12
push r13
mov r11, rcx ; move callAddress into rax, shift all parameters into correct registers
mov eax, edx ; move num parameters into ax
mov r13, [rsp+20h]
mov r12, r8 ;copy parameter list into r12 since we may overwrite r8
mov rcx, r8
mov rdx, r9
p_loop:
cmp eax, 0 ;if 0 parameters, jmp to call routine
je to_call
cmp ax, 1
jne p2
mov rcx, [r12]
dec ax
jmp p_loop
p2:
cmp ax, 2
jne p3
mov rdx, [r12+08h]
dec ax
jmp p_loop
p3:
cmp ax, 3
jne p4
mov r8, [r12 + 10h]
dec ax
jmp p_loop
p4:
cmp ax, 4
jg p_above4
mov r9, [r12 + 18h]
dec ax
jmp p_loop
p_above4:
push r14
push r15
mov r14w, ax
imul r14, 08h
sub r14, 08h
mov r15, [r12 + r14] ; move n-th parameter (above 5) into r15
add r14, 10h ;make up for the two pushes above
mov [rsp+r14], r15
pop r15
pop r14
dec ax
jmp p_loop
to_call:
call r11
pop r12
pop r11
pop rax
mov [rsp+08h], r13
pop r13
ret
VM_Call ENDP
END