73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
#ifndef _STDC_COMMON_H
|
|
#define _STDC_COMMON_H
|
|
|
|
#define signed
|
|
#define volatile
|
|
#define register
|
|
#define const
|
|
#define NULL ((void*)0)
|
|
|
|
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);
|
|
}
|
|
|
|
size_t strlen(char *s) {
|
|
char *t = s;
|
|
while (*t) ++t;
|
|
return t - s;
|
|
}
|
|
|
|
#endif // _STDC_COMMON_H
|