summaryrefslogtreecommitdiff
path: root/minix/lib/libhgfs/backdoor.S
blob: e7e51e6468c9584ae1c9f34f07040a9f52b306e9 (plain)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/* Part of libhgfs - (c) 2009, D.C. van Moolenbroek */
#include <machine/asm.h>

.text

	MAGIC = 0x564D5868
	BD_PORT = 0x5658
	IO_PORT = 0x5659

ENTRY(__libhgfs_backdoor)
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	pushl	%ebp
	movl	4+16(%esp), %ebp
	movl	$MAGIC, %eax
	movl	4(%ebp), %ebx
	movl	8(%ebp), %ecx
	movl	12(%ebp), %edx
	movw	$BD_PORT, %dx
	movl	16(%ebp), %esi
	movl	20(%ebp), %edi
	inl	%dx
	movl	%eax, (%ebp)
	movl	%ebx, 4(%ebp)
	movl	%ecx, 8(%ebp)
	movl	%edx, 12(%ebp)
	movl	%esi, 16(%ebp)
	movl	%edi, 20(%ebp)
	popl	%ebp
	popl	%edi
	popl	%esi
	popl	%ebx
	ret

ENTRY(__libhgfs_backdoor_in)
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	pushl	%ebp
	movl	4+16(%esp), %eax
	movl	4(%eax), %ebx
	movl	8(%eax), %ecx
	movl	12(%eax), %edx
	movw	$IO_PORT, %dx
	movl	16(%eax), %esi
	movl	20(%eax), %edi
	movl	24(%eax), %ebp
	movl	$MAGIC, %eax
	cld
	repe; insb
	pushl	%eax
	movl	4+20(%esp), %eax
	movl	%ebx, 4(%eax)
	movl	%ecx, 8(%eax)
	movl	%edx, 12(%eax)
	movl	%esi, 16(%eax)
	movl	%edi, 20(%eax)
	movl	%ebp, 24(%eax)
	popl	%ebx
	movl	%ebx, (%eax)
	movl	(%eax), %eax
	popl	%ebp
	popl	%edi
	popl	%esi
	popl	%ebx
	ret

ENTRY(__libhgfs_backdoor_out)
	pushl	%ebx
	pushl	%esi
	pushl	%edi
	pushl	%ebp
	movl	4+16(%esp), %eax
	movl	4(%eax), %ebx
	movl	8(%eax), %ecx
	movl	12(%eax), %edx
	movw	$IO_PORT, %dx
	movl	16(%eax), %esi
	movl	20(%eax), %edi
	movl	24(%eax), %ebp
	movl	$MAGIC, %eax
	cld
	repe; outsb
	pushl	%eax
	movl	4+20(%esp), %eax
	movl	%ebx, 4(%eax)
	movl	%ecx, 8(%eax)
	movl	%edx, 12(%eax)
	movl	%esi, 16(%eax)
	movl	%edi, 20(%eax)
	movl	%ebp, 24(%eax)
	popl	%ebx
	movl	%ebx, (%eax)
	movl	(%eax), %eax
	popl	%ebp
	popl	%edi
	popl	%esi
	popl	%ebx
	ret