From 126762cc9b3322d724102ebd94ff8d4e2311c150 Mon Sep 17 00:00:00 2001 From: verdant Date: Mon, 1 Jun 2026 20:44:58 +0800 Subject: Initial commit --- Makefile | 33 +++++++++++++++++++++++++++++++++ helloworld.c | 4 ++++ syscall.s | 14 ++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 Makefile create mode 100644 helloworld.c create mode 100644 syscall.s diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5c48466 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +CC = gcc +AS = as +LD = ld + +CFLAGS = -c -nostdlib -fno-builtin +ASFLAGS = -c + +LDFLAGS = -entry main -z noexecstack + +TARGET = helloworld +OBJS = syscall.o helloworld.o + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(LD) $(OBJS) $(LDFLAGS) -o $@ + +helloworld.o: helloworld.c + $(CC) $(CFLAGS) $< -o $@ + +syscall.o: syscall.s + $(AS) $(ASFLAGS) $< -o $@ + +clean: + rm -f $(OBJS) $(TARGET) + +run: $(TARGET) + ./$(TARGET) + +size: $(TARGET) + stat -c "%s bytes" $(TARGET) + +.PHONY: all clean run size diff --git a/helloworld.c b/helloworld.c new file mode 100644 index 0000000..5d89a54 --- /dev/null +++ b/helloworld.c @@ -0,0 +1,4 @@ +int main() { + write(1, "hello world", 12); + exit(0); +} diff --git a/syscall.s b/syscall.s new file mode 100644 index 0000000..cf3cacb --- /dev/null +++ b/syscall.s @@ -0,0 +1,14 @@ +.intel_syntax noprefix + +.global write +.global exit + + +write: + mov rax, 1 + syscall + ret + +exit: + mov rax, 60 + syscall -- cgit v1.2.3