summaryrefslogtreecommitdiff
path: root/05/stdc_common.h
diff options
context:
space:
mode:
Diffstat (limited to '05/stdc_common.h')
-rw-r--r--05/stdc_common.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/05/stdc_common.h b/05/stdc_common.h
new file mode 100644
index 0000000..ad56b4d
--- /dev/null
+++ b/05/stdc_common.h
@@ -0,0 +1,66 @@
+#ifndef _STDC_COMMON_H
+#define _STDC_COMMON_H
+
+#define signed
+#define volatile
+#define register
+#define const
+
+typedef unsigned char uint8_t;
+typedef char int8_t;
+typedef unsigned short uint16_t;
+typedef short int16_t;
+typedef unsigned int uint32_t;
+typedef int int32_t;
+typedef unsigned long uint64_t;
+typedef long int64_t;
+typedef unsigned long size_t;
+typedef long ptrdiff_t;
+typedef unsigned long uintptr_t;
+typedef long intptr_t;
+
+static unsigned char __syscall_data[] = {
+ // mov rax, [rsp+24]
+ 0x48, 0x8b, 0x84, 0x24, 24, 0, 0, 0,
+ // mov rdi, rax
+ 0x48, 0x89, 0xc7,
+ // mov rax, [rsp+32]
+ 0x48, 0x8b, 0x84, 0x24, 32, 0, 0, 0,
+ // mov rsi, rax
+ 0x48, 0x89, 0xc6,
+ // mov rax, [rsp+40]
+ 0x48, 0x8b, 0x84, 0x24, 40, 0, 0, 0,
+ // mov rdx, rax
+ 0x48, 0x89, 0xc2,
+ // mov rax, [rsp+48]
+ 0x48, 0x8b, 0x84, 0x24, 48, 0, 0, 0,
+ // mov r10, rax
+ 0x49, 0x89, 0xc2,
+ // mov rax, [rsp+56]
+ 0x48, 0x8b, 0x84, 0x24, 56, 0, 0, 0,
+ // mov r8, rax
+ 0x49, 0x89, 0xc0,
+ // mov rax, [rsp+64]
+ 0x48, 0x8b, 0x84, 0x24, 64, 0, 0, 0,
+ // mov r9, rax
+ 0x49, 0x89, 0xc1,
+ // mov rax, [rsp+16]
+ 0x48, 0x8b, 0x84, 0x24, 16, 0, 0, 0,
+ // syscall
+ 0x0f, 0x05,
+ // mov [rsp+8], rax
+ 0x48, 0x89, 0x84, 0x24, 8, 0, 0, 0,
+ // ret
+ 0xc3
+};
+
+#define __syscall(no, arg1, arg2, arg3, arg4, arg5, arg6)\
+ (((unsigned long (*)(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long))__syscall_data)\
+ (no, arg1, arg2, arg3, arg4, arg5, arg6))
+
+
+long write(int fd, void *buf, size_t count) {
+ __syscall(1, fd, buf, count, 0, 0, 0);
+}
+
+#endif // _STDC_COMMON_H