summaryrefslogtreecommitdiff
path: root/05/main.c
diff options
context:
space:
mode:
authorpommicket <pommicket@gmail.com>2022-02-13 22:12:44 -0500
committerpommicket <pommicket@gmail.com>2022-02-13 22:12:44 -0500
commitb9fd2a2b9cfd2f1a84223adc9aa3dc20d74436b4 (patch)
tree6b66fccc7dae7b2f550e18400332e1b2fa58ec1b /05/main.c
parent2fef6981954df735f1f364e96c365c6f000a638b (diff)
sprintf working! (but not snprintf ...)
Diffstat (limited to '05/main.c')
-rw-r--r--05/main.c52
1 files changed, 6 insertions, 46 deletions
diff --git a/05/main.c b/05/main.c
index fc4b036..7503a10 100644
--- a/05/main.c
+++ b/05/main.c
@@ -1,50 +1,10 @@
-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))
-
-typedef unsigned long size_t;
-
-long write(int fd, void *buf, size_t count) {
- __syscall(1, fd, buf, count, 0, 0, 0);
-}
+#include <stdio.h>
int main(int argc, char **argv) {
- write(1, "Hello, world!\n", 14);
- return 0;
+ char buf[200] = {0};
+ sprintf(buf, "Hello, %d %.2f %g %s %p\n", 187, 77.3, 349e12, "Wow!", "yea");
+ // snprintf(buf, 200, "Hello\n"); //<- NOT WORKING
+ write(1, buf, sizeof buf);
+ return *buf;
}