Skip to content

Commit dba0cd0

Browse files
Added comments to the library
1 parent a0a4a47 commit dba0cd0

File tree

1 file changed

+119
-118
lines changed

1 file changed

+119
-118
lines changed

macrolib/macrolib.inc

Lines changed: 119 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,166 +1,167 @@
1-
macro clr reg { xor reg,reg }
1+
macro clr reg { xor reg,reg } ; clears the specified register using xor
22

33
macro exit value {
4-
mov rax, 60
5-
mov rdi, value
6-
syscall
4+
mov rax, 60 ; sets syscall number for exit
5+
mov rdi, value ; sets exit code
6+
syscall ; performs the syscall
77
}
88

99
macro mkdir dir_name, permissions {
10-
push rdi
11-
push rsi
10+
push rdi ; saves rdi register
11+
push rsi ; saves rsi register
1212

13-
mov rax, 83
14-
mov rdi, dir_name
15-
mov rsi, permissions
16-
syscall
13+
mov rax, 83 ; sets syscall number for mkdir
14+
mov rdi, dir_name ; sets path to directory
15+
mov rsi, permissions ; sets permissions
16+
syscall ; performs the syscall
1717

18-
pop rsi
19-
pop rdi
18+
pop rsi ; restores rsi register
19+
pop rdi ; restores rdi register
2020
}
2121

2222
macro time {
23-
push rdi
23+
push rdi ; saves rdi register
2424

25-
mov rax, 201
26-
xor rdi, rdi
27-
syscall
25+
mov rax, 201 ; sets syscall number for time
26+
xor rdi, rdi ; sets argument to NULL (store time in rax)
27+
syscall ; performs the syscall
2828

29-
pop rdi
29+
pop rdi ; restores rdi register
3030

3131
}
3232

3333
macro printnum value {
34-
push rdi
35-
push rcx
36-
push rbx
37-
push rdx
38-
push rsi
39-
push r8
40-
41-
local .convert
42-
43-
mov rax, value
44-
mov rdi, buffer
45-
add rdi, 31
46-
mov byte [rdi], 0
47-
48-
mov rcx, 10
49-
mov rbx, rax
50-
51-
.convert:
52-
dec rdi
53-
xor rdx, rdx
54-
div rcx
55-
add dl, '0'
56-
mov [rdi], dl
57-
test rax, rax
58-
jnz .convert
34+
push rdi ; saves rdi register
35+
push rcx ; saves rcx register
36+
push rbx ; saves rbx register
37+
push rdx ; saves rdx register
38+
push rsi ; saves rsi register
39+
push r8 ; saves r8 register
40+
41+
local .convert ; declares local label .convert
42+
43+
mov rax, value ; moves value to rax
44+
mov rdi, buffer ; sets rdi to point to buffer start
45+
add rdi, 31 ; moves rdi to end of buffer
46+
mov byte [rdi], 0 ; writes null terminator at buffer end
47+
48+
mov rcx, 10 ; sets divisor to 10 (decimal base)
49+
mov rbx, rax ; copies value to rbx for division
50+
51+
.convert: ; .convert label start
52+
dec rdi ; moves pointer one byte left
53+
xor rdx, rdx ; clears rdx (high part of dividend)
54+
div rcx ; divides rax by rcx, quotient in rax, remainder in rdx
55+
add dl, '0' ; converts remainder to ASCII digit
56+
mov [rdi], dl ; stores digit at current rdi
57+
test rax, rax ; tests if quotient is zero
58+
jnz .convert ; loops if quotient not zero
5959

6060
mov rsi, rdi
61-
mov rax, 1
62-
mov rdi, 1
63-
mov rdx, buffer
64-
add rdx, 32
65-
sub rdx, rsi
66-
syscall
67-
68-
xor r8, r8
69-
mov r8, rax
70-
71-
mov rax, 1
72-
mov rdi, 1
73-
mov rsi, newline
74-
mov rdx, 1
75-
syscall
76-
77-
add rax, r8
78-
79-
pop r8
80-
pop rsi
81-
pop rdx
82-
pop rbx
83-
pop rcx
84-
pop rdi
61+
mov rax, 1 ; sets syscall number for write
62+
mov rdi, 1 ; sets file descriptor to stdout (1)
63+
mov rdx, buffer ; buffer start address
64+
add rdx, 32 ; buffer end address
65+
sub rdx, rsi ; calculates length of number string
66+
syscall ; performs syscall
67+
68+
xor r8, r8 ; clears r8
69+
mov r8, rax ; saves number of bytes written
70+
71+
mov rax, 1 ; sets syscall number for write
72+
mov rdi, 1 ; sets file descriptor to stdout (1)
73+
mov rsi, newline ; pointer to newline char
74+
mov rdx, 1 ; length 1 byte
75+
syscall ; performs the syscall
76+
77+
add rax, r8 ; adds bytes written (number + newline)
78+
79+
pop r8 ; restores r8 register
80+
pop rsi ; restores rsi register
81+
pop rdx ; restores rdx register
82+
pop rbx ; restores rbx register
83+
pop rcx ; restores rcx register
84+
pop rdi ; restores rdi register
8585
}
8686

8787
macro printtim times, str, str_len {
88-
local .loop
88+
push r8 ; saves r8 register
89+
push rbx ; saves rbx register
90+
push rdi ; saves rdi register
91+
push rsi ; saves rsi register
92+
push rdx ; saves rdx register
8993

90-
push r8
91-
push rbx
92-
push rdi
93-
push rsi
94-
push rdx
94+
local .loop ; declares local label .loop
9595

96-
xor r8, r8
97-
mov rbx, times
96+
xor r8, r8 ; clears r8 (counter)
97+
mov rbx, times ; moves times to rbx (loop counter)
9898

99-
.loop:
100-
mov rax, 1
101-
mov rdi, 1
102-
mov rsi, str
103-
mov rdx, str_len
104-
syscall
99+
.loop: ; .loop label start
100+
mov rax, 1 ; sets syscall number for write
101+
mov rdi, 1 ; sets file descriptor to stdout (1)
102+
mov rsi, str ; sets pointer to string to write
103+
mov rdx, str_len ; sets length of string
104+
syscall ; performs the syscall
105105

106-
add r8, rax
106+
add r8, rax ; adds number of bytes written to r8
107107

108-
dec rbx
109-
jnz .loop
108+
dec rbx ; decrements rbx
109+
jnz .loop ; jumps to .loop if rbx not zero
110110

111-
mov rax, r8
111+
mov rax, r8 ; moves total bytes written from r8 to rax
112112

113-
pop rdx
114-
pop rsi
115-
pop rdi
116-
pop rbx
117-
pop r8
113+
pop rdx ; restores rdx register
114+
pop rsi ; restores rsi register
115+
pop rdi ; restores rdi register
116+
pop rbx ; restores rbx register
117+
pop r8 ; restores r8 register
118118
}
119119

120120
macro print str, str_len {
121-
push rdi
122-
push rsi
123-
push rdx
124-
125-
mov rax, 1
126-
mov rdi, 1
127-
mov rsi, str
128-
mov rdx, str_len
129-
syscall
130-
131-
pop rdx
132-
pop rsi
133-
pop rdi
121+
push rdi ; saves rdi register
122+
push rsi ; saves rsi register
123+
push rdx ; saves rdx register
124+
125+
mov rax, 1 ; sets syscall number for write
126+
mov rdi, 1 ; sets file descriptor to stdout (1)
127+
mov rsi, str ; sets pointer to string to write
128+
mov rdx, str_len ; sets length of string
129+
syscall ; performs the syscall
130+
131+
pop rdx ; restores rdx register
132+
pop rsi ; restores rsi register
133+
pop rdi ; restores rdi register
134134
}
135135

136136
macro rmdir dir_name {
137-
push rdi
137+
push rdi ; saves rdi register
138138

139-
mov rax, 84
140-
mov rdi, dir_name
141-
syscall
139+
mov rax, 84 ; sets syscall number for rmdir
140+
mov rdi, dir_name ; sets path to directory
141+
syscall ; performs the syscall
142142

143-
pop rdi
143+
pop rdi ; restores rdi register
144144
}
145145

146146
macro run command {
147147
local .path, .arg2str, .arg3str, .argv
148148

149-
mov rax, 59
150-
lea rdi, [.path]
151-
lea rsi, [.argv]
152-
xor rdx, rdx
153-
syscall
149+
mov rax, 59 ; sets syscall number for execve
150+
lea rdi, [.path] ; loads pointer to program path "/bin/sh"
151+
lea rsi, [.argv] ; loads pointer to argument vector array
152+
xor rdx, rdx ; clears rdx (envp pointer set to NULL)
153+
syscall ; performs the syscall
154154

155-
.path db "/bin/sh", 0
156-
.arg2str db "-c", 0
157-
.arg3str db command, 0
158-
.argv dq .path, .arg2str, .arg3str, 0
155+
.path db "/bin/sh", 0 ; defines path string "/bin/sh" null-terminated
156+
.arg2str db "-c", 0 ; defines second argument "-c" null-terminated
157+
.arg3str db command, 0 ; defines third argument as the command string null-terminated
158+
.argv dq .path, .arg2str, .arg3str, 0 ; defines argv array with pointers to path, arg2str, arg3str, and NULL terminator
159159
}
160160

161-
macro push [arg] { push arg }
161+
macro push [arg] { push arg } ; saves multiple registers onto the stack
162+
163+
macro pop [arg] { pop arg } ; restores multiple registers from the stack
162164

163-
macro pop [arg] { pop arg }
164165

165166
newline db 10
166167
buffer rb 32

0 commit comments

Comments
 (0)