hello /g/entlemen, please review my Hello world in C. It's my first time programming, so please be gentle.
#include <stdint.h>
typedef uint64_t u64;
#define STRINGIFY(...) #__VA_ARGS__
void syscall3(u64 op_code, u64 arg1, u64 arg2, u64 arg3)
{
asm(STRINGIFY(mov rax, %[opcode];
mov rdi, %[arg1];
mov rsi, %[arg2];
mov rdx, %[arg3];
syscall;)
:
: [opcode] "r"(op_code), [arg1] "r"(arg1), [arg2] "r"(arg2),
[arg3] "r"(arg3)
: "rax", "rdi", "rsi", "rdx");
}
int main(void)
{
static const char buffer[] = "Hello, world!\n";
syscall3(1, 1, (u64)buffer, sizeof(buffer) - 1);
return 0;
}
__attribute__((naked)) void _start(void)
{
asm(STRINGIFY(
mov rbp, 0;
call main;
mov rdi, rax;
mov rax, 60;
syscall;)
);
}