summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/unistd.asm382
-rw-r--r--utils/utils.asm43
-rw-r--r--utils/utils.h9
3 files changed, 434 insertions, 0 deletions
diff --git a/utils/unistd.asm b/utils/unistd.asm
new file mode 100644
index 0000000..4f13c45
--- /dev/null
+++ b/utils/unistd.asm
@@ -0,0 +1,382 @@
+%ifndef _ASM_UNISTD
+%define _ASM_UNISTD
+
+%define F_OK 0
+%define X_OK 1
+%define W_OK 2
+%define R_OK 4
+
+%define PROT_NONE 0x0
+%define PROT_READ 0x1
+%define PROT_WRITE 0x2
+%define PROT_EXEC 0x4
+%define PROT_SEM 0x8
+%define PROT_GROWSDOWN 0x01000000
+%define PROT_GROWSUP 0x02000000
+
+%define MAP_SHARED 0x01
+%define MAP_PRIVATE 0x02
+%define MAP_SHARED_VALIDATE 0x03
+
+%define SYS_read 0
+%define SYS_write 1
+%define SYS_open 2
+%define SYS_close 3
+%define SYS_stat 4
+%define SYS_fstat 5
+%define SYS_lstat 6
+%define SYS_poll 7
+%define SYS_lseek 8
+%define SYS_mmap 9
+%define SYS_mprotect 10
+%define SYS_munmap 11
+%define SYS_brk 12
+%define SYS_rt_sigaction 13
+%define SYS_rt_sigprocmask 14
+%define SYS_rt_sigreturn 15
+%define SYS_ioctl 16
+%define SYS_pread64 17
+%define SYS_pwrite64 18
+%define SYS_readv 19
+%define SYS_writev 20
+%define SYS_access 21
+%define SYS_pipe 22
+%define SYS_select 23
+%define SYS_sched_yield 24
+%define SYS_mremap 25
+%define SYS_msync 26
+%define SYS_mincore 27
+%define SYS_madvise 28
+%define SYS_shmget 29
+%define SYS_shmat 30
+%define SYS_shmctl 31
+%define SYS_dup 32
+%define SYS_dup2 33
+%define SYS_pause 34
+%define SYS_nanosleep 35
+%define SYS_getitimer 36
+%define SYS_alarm 37
+%define SYS_setitimer 38
+%define SYS_getpid 39
+%define SYS_sendfile 40
+%define SYS_socket 41
+%define SYS_connect 42
+%define SYS_accept 43
+%define SYS_sendto 44
+%define SYS_recvfrom 45
+%define SYS_sendmsg 46
+%define SYS_recvmsg 47
+%define SYS_shutdown 48
+%define SYS_bind 49
+%define SYS_listen 50
+%define SYS_getsockname 51
+%define SYS_getpeername 52
+%define SYS_socketpair 53
+%define SYS_setsockopt 54
+%define SYS_getsockopt 55
+%define SYS_clone 56
+%define SYS_fork 57
+%define SYS_vfork 58
+%define SYS_execve 59
+%define SYS_exit 60
+%define SYS_wait4 61
+%define SYS_kill 62
+%define SYS_uname 63
+%define SYS_semget 64
+%define SYS_semop 65
+%define SYS_semctl 66
+%define SYS_shmdt 67
+%define SYS_msgget 68
+%define SYS_msgsnd 69
+%define SYS_msgrcv 70
+%define SYS_msgctl 71
+%define SYS_fcntl 72
+%define SYS_flock 73
+%define SYS_fsync 74
+%define SYS_fdatasync 75
+%define SYS_truncate 76
+%define SYS_ftruncate 77
+%define SYS_getdents 78
+%define SYS_getcwd 79
+%define SYS_chdir 80
+%define SYS_fchdir 81
+%define SYS_rename 82
+%define SYS_mkdir 83
+%define SYS_rmdir 84
+%define SYS_creat 85
+%define SYS_link 86
+%define SYS_unlink 87
+%define SYS_symlink 88
+%define SYS_readlink 89
+%define SYS_chmod 90
+%define SYS_fchmod 91
+%define SYS_chown 92
+%define SYS_fchown 93
+%define SYS_lchown 94
+%define SYS_umask 95
+%define SYS_gettimeofday 96
+%define SYS_getrlimit 97
+%define SYS_getrusage 98
+%define SYS_sysinfo 99
+%define SYS_times 100
+%define SYS_ptrace 101
+%define SYS_getuid 102
+%define SYS_syslog 103
+%define SYS_getgid 104
+%define SYS_setuid 105
+%define SYS_setgid 106
+%define SYS_geteuid 107
+%define SYS_getegid 108
+%define SYS_setpgid 109
+%define SYS_getppid 110
+%define SYS_getpgrp 111
+%define SYS_setsid 112
+%define SYS_setreuid 113
+%define SYS_setregid 114
+%define SYS_getgroups 115
+%define SYS_setgroups 116
+%define SYS_setresuid 117
+%define SYS_getresuid 118
+%define SYS_setresgid 119
+%define SYS_getresgid 120
+%define SYS_getpgid 121
+%define SYS_setfsuid 122
+%define SYS_setfsgid 123
+%define SYS_getsid 124
+%define SYS_capget 125
+%define SYS_capset 126
+%define SYS_rt_sigpending 127
+%define SYS_rt_sigtimedwait 128
+%define SYS_rt_sigqueueinfo 129
+%define SYS_rt_sigsuspend 130
+%define SYS_sigaltstack 131
+%define SYS_utime 132
+%define SYS_mknod 133
+%define SYS_uselib 134
+%define SYS_personality 135
+%define SYS_ustat 136
+%define SYS_statfs 137
+%define SYS_fstatfs 138
+%define SYS_sysfs 139
+%define SYS_getpriority 140
+%define SYS_setpriority 141
+%define SYS_sched_setparam 142
+%define SYS_sched_getparam 143
+%define SYS_sched_setscheduler 144
+%define SYS_sched_getscheduler 145
+%define SYS_sched_get_priority_max 146
+%define SYS_sched_get_priority_min 147
+%define SYS_sched_rr_get_interval 148
+%define SYS_mlock 149
+%define SYS_munlock 150
+%define SYS_mlockall 151
+%define SYS_munlockall 152
+%define SYS_vhangup 153
+%define SYS_modify_ldt 154
+%define SYS_pivot_root 155
+%define SYS__sysctl 156
+%define SYS_prctl 157
+%define SYS_arch_prctl 158
+%define SYS_adjtimex 159
+%define SYS_setrlimit 160
+%define SYS_chroot 161
+%define SYS_sync 162
+%define SYS_acct 163
+%define SYS_settimeofday 164
+%define SYS_mount 165
+%define SYS_umount2 166
+%define SYS_swapon 167
+%define SYS_swapoff 168
+%define SYS_reboot 169
+%define SYS_sethostname 170
+%define SYS_setdomainname 171
+%define SYS_iopl 172
+%define SYS_ioperm 173
+%define SYS_create_module 174
+%define SYS_init_module 175
+%define SYS_delete_module 176
+%define SYS_get_kernel_syms 177
+%define SYS_query_module 178
+%define SYS_quotactl 179
+%define SYS_nfsservctl 180
+%define SYS_getpmsg 181
+%define SYS_putpmsg 182
+%define SYS_afs_syscall 183
+%define SYS_tuxcall 184
+%define SYS_security 185
+%define SYS_gettid 186
+%define SYS_readahead 187
+%define SYS_setxattr 188
+%define SYS_lsetxattr 189
+%define SYS_fsetxattr 190
+%define SYS_getxattr 191
+%define SYS_lgetxattr 192
+%define SYS_fgetxattr 193
+%define SYS_listxattr 194
+%define SYS_llistxattr 195
+%define SYS_flistxattr 196
+%define SYS_removexattr 197
+%define SYS_lremovexattr 198
+%define SYS_fremovexattr 199
+%define SYS_tkill 200
+%define SYS_time 201
+%define SYS_futex 202
+%define SYS_sched_setaffinity 203
+%define SYS_sched_getaffinity 204
+%define SYS_set_thread_area 205
+%define SYS_io_setup 206
+%define SYS_io_destroy 207
+%define SYS_io_getevents 208
+%define SYS_io_submit 209
+%define SYS_io_cancel 210
+%define SYS_get_thread_area 211
+%define SYS_lookup_dcookie 212
+%define SYS_epoll_create 213
+%define SYS_epoll_ctl_old 214
+%define SYS_epoll_wait_old 215
+%define SYS_remap_file_pages 216
+%define SYS_getdents64 217
+%define SYS_set_tid_address 218
+%define SYS_restart_syscall 219
+%define SYS_semtimedop 220
+%define SYS_fadvise64 221
+%define SYS_timer_create 222
+%define SYS_timer_settime 223
+%define SYS_timer_gettime 224
+%define SYS_timer_getoverrun 225
+%define SYS_timer_delete 226
+%define SYS_clock_settime 227
+%define SYS_clock_gettime 228
+%define SYS_clock_getres 229
+%define SYS_clock_nanosleep 230
+%define SYS_exit_group 231
+%define SYS_epoll_wait 232
+%define SYS_epoll_ctl 233
+%define SYS_tgkill 234
+%define SYS_utimes 235
+%define SYS_vserver 236
+%define SYS_mbind 237
+%define SYS_set_mempolicy 238
+%define SYS_get_mempolicy 239
+%define SYS_mq_open 240
+%define SYS_mq_unlink 241
+%define SYS_mq_timedsend 242
+%define SYS_mq_timedreceive 243
+%define SYS_mq_notify 244
+%define SYS_mq_getsetattr 245
+%define SYS_kexec_load 246
+%define SYS_waitid 247
+%define SYS_add_key 248
+%define SYS_request_key 249
+%define SYS_keyctl 250
+%define SYS_ioprio_set 251
+%define SYS_ioprio_get 252
+%define SYS_inotify_init 253
+%define SYS_inotify_add_watch 254
+%define SYS_inotify_rm_watch 255
+%define SYS_migrate_pages 256
+%define SYS_openat 257
+%define SYS_mkdirat 258
+%define SYS_mknodat 259
+%define SYS_fchownat 260
+%define SYS_futimesat 261
+%define SYS_newfstatat 262
+%define SYS_unlinkat 263
+%define SYS_renameat 264
+%define SYS_linkat 265
+%define SYS_symlinkat 266
+%define SYS_readlinkat 267
+%define SYS_fchmodat 268
+%define SYS_faccessat 269
+%define SYS_pselect6 270
+%define SYS_ppoll 271
+%define SYS_unshare 272
+%define SYS_set_robust_list 273
+%define SYS_get_robust_list 274
+%define SYS_splice 275
+%define SYS_tee 276
+%define SYS_sync_file_range 277
+%define SYS_vmsplice 278
+%define SYS_move_pages 279
+%define SYS_utimensat 280
+%define SYS_epoll_pwait 281
+%define SYS_signalfd 282
+%define SYS_timerfd_create 283
+%define SYS_eventfd 284
+%define SYS_fallocate 285
+%define SYS_timerfd_settime 286
+%define SYS_timerfd_gettime 287
+%define SYS_accept4 288
+%define SYS_signalfd4 289
+%define SYS_eventfd2 290
+%define SYS_epoll_create1 291
+%define SYS_dup3 292
+%define SYS_pipe2 293
+%define SYS_inotify_init1 294
+%define SYS_preadv 295
+%define SYS_pwritev 296
+%define SYS_rt_tgsigqueueinfo 297
+%define SYS_perf_event_open 298
+%define SYS_recvmmsg 299
+%define SYS_fanotify_init 300
+%define SYS_fanotify_mark 301
+%define SYS_prlimit64 302
+%define SYS_name_to_handle_at 303
+%define SYS_open_by_handle_at 304
+%define SYS_clock_adjtime 305
+%define SYS_syncfs 306
+%define SYS_sendmmsg 307
+%define SYS_setns 308
+%define SYS_getcpu 309
+%define SYS_process_vm_readv 310
+%define SYS_process_vm_writev 311
+%define SYS_kcmp 312
+%define SYS_finit_module 313
+%define SYS_sched_setattr 314
+%define SYS_sched_getattr 315
+%define SYS_renameat2 316
+%define SYS_seccomp 317
+%define SYS_getrandom 318
+%define SYS_memfd_create 319
+%define SYS_kexec_file_load 320
+%define SYS_bpf 321
+%define SYS_execveat 322
+%define SYS_userfaultfd 323
+%define SYS_membarrier 324
+%define SYS_mlock2 325
+%define SYS_copy_file_range 326
+%define SYS_preadv2 327
+%define SYS_pwritev2 328
+%define SYS_pkey_mprotect 329
+%define SYS_pkey_alloc 330
+%define SYS_pkey_free 331
+%define SYS_statx 332
+%define SYS_io_pgetevents 333
+%define SYS_rseq 334
+%define SYS_pidfd_send_signal 424
+%define SYS_io_uring_setup 425
+%define SYS_io_uring_enter 426
+%define SYS_io_uring_register 427
+%define SYS_open_tree 428
+%define SYS_move_mount 429
+%define SYS_fsopen 430
+%define SYS_fsconfig 431
+%define SYS_fsmount 432
+%define SYS_fspick 433
+%define SYS_pidfd_open 434
+%define SYS_clone3 435
+%define SYS_close_range 436
+%define SYS_openat2 437
+%define SYS_pidfd_getfd 438
+%define SYS_faccessat2 439
+%define SYS_process_madvise 440
+%define SYS_epoll_pwait2 441
+%define SYS_mount_setattr 442
+%define SYS_quotactl_fd 443
+%define SYS_landlock_create_ruleset 444
+%define SYS_landlock_add_rule 445
+%define SYS_landlock_restrict_self 446
+%define SYS_memfd_secret 447
+%define SYS_process_mrelease 448
+
+%endif
diff --git a/utils/utils.asm b/utils/utils.asm
new file mode 100644
index 0000000..5b65f15
--- /dev/null
+++ b/utils/utils.asm
@@ -0,0 +1,43 @@
+global atoi, write_ulong
+
+%include "unistd.asm"
+
+section .text
+atoi:
+ mov ecx, 10
+ xor eax, eax
+.loop:
+ movzx r8d, byte [rdi]
+ xor r8d, '0'
+ cmp r8d, ecx ; minor optimization, comparing with a register generates smaller machine code then comparing with an immediate
+ jnl .return
+ xor edx, edx
+ mul rcx
+ add eax, r8d
+ inc rdi ; Move ptr to next character
+ jmp .loop
+.return:
+ ret
+
+write_ulong:
+ push rdi ; Push fd onto stack
+ mov rax, rsi
+ lea rcx, [rsp - 1]
+ mov byte [rcx], 0
+ mov rsi, rcx
+ mov edi, 10 ; Divisor
+.loop:
+ xor edx, edx
+ div rdi
+ xor edx, '0'
+ dec rsi
+ mov byte [rsi], dl
+ test rax, rax
+ jnz .loop
+
+ mov rax, SYS_write
+ pop rdi ; Pop fd from stack
+ mov rdx, rcx
+ sub rdx, rsi
+ syscall
+ ret
diff --git a/utils/utils.h b/utils/utils.h
new file mode 100644
index 0000000..840d1d4
--- /dev/null
+++ b/utils/utils.h
@@ -0,0 +1,9 @@
+#ifndef AOC_UTILS_H
+#define AOC_UTILS_H
+
+#define SWAP(a, b) (((a) ^= (b)), ((b) ^= (a)), ((a) ^= (b)))
+
+#define likely(x) __builtin_expect((x), 1)
+#define unlikely(x) __builtin_expect((x), 0)
+
+#endif