back to scratko.xyz
aboutsummaryrefslogtreecommitdiff
path: root/calls.asm
blob: 7d45fa77b57bd42f388b15904288baf22e29325d (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
global sys_write
global sys_read
global sys_errno
global sys_alloc
global sys_free
global sys_exit

section .text

generic_sys_call_3:
		push ebp
		mov ebp, esp
		push ebx
		mov ebx, [ebp+8]
		mov ecx, [ebp+12]
		mov edx, [ebp+16]
		int 80h
		mov edx, eax
		and edx, 0fffff000h
		cmp edx, 0fffff000h
		jnz .okay
		mov [sys_errno], eax
		xor eax, eax
		not eax			; -1
.okay:		pop ebx
		mov esp, ebp
		pop ebp
		ret

sys_write:	mov eax, 4
		jmp generic_sys_call_3
sys_read:	mov eax, 3
		jmp generic_sys_call_3

sys_alloc:	push ebp
		mov ebp, esp	
		mov eax, 45		; brk()
		xor ebx, ebx
		int 80h
		mov [initial_break], eax

		mov eax, 45
		mov ebx, [initial_break]
		add ebx, [ebp+8]
		int 80h
		cmp eax, [initial_break]
		jz .error
		mov eax, [initial_break]
		jmp .quit
.error:		mov eax, -1
.quit:		mov esp, ebp
		pop ebp
		ret

sys_free:	push ebp
		mov ebp, esp
		mov eax, 45
		mov ebx, [ebp+8]
		int 80h
		mov esp, ebp
		pop ebp
		ret

sys_exit:	push ebp
		mov ebp, esp
		mov eax, 1
		mov ebx, [ebp+8]
		int 80h
		mov esp, ebp
		pop ebp
		ret 

section .bss
sys_errno 	resd	1

section .data
initial_break	dd	0