diff options
| author | hachem <im@hachem.wtf> | 2026-09-25 11:31:59 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-25 11:31:59 +0200 |
| commit | ed285c9fc665e262ed21c7bf5734acb2b7a532db (patch) | |
| tree | e51434e8069bc7219221cc1136515828d0293aca /user | |
| parent | d18d1da05a4d065d54787434d6bc46f3354626a5 (diff) | |
feat: load + run native ELF binaries
Diffstat (limited to 'user')
| -rw-r--r-- | user/link.ld | 8 | ||||
| -rw-r--r-- | user/program.c | 22 |
2 files changed, 30 insertions, 0 deletions
diff --git a/user/link.ld b/user/link.ld new file mode 100644 index 0000000..9dc8402 --- /dev/null +++ b/user/link.ld @@ -0,0 +1,8 @@ +ENTRY(_start) +SECTIONS { + . = 0x400000; + .text : ALIGN(0x1000) { *(.text*) } + .rodata : ALIGN(0x1000) { *(.rodata*) } + .data : ALIGN(0x1000) { *(.data*) } + .bss : ALIGN(0x1000) { *(.bss*) *(COMMON) } +} diff --git a/user/program.c b/user/program.c new file mode 100644 index 0000000..8e26128 --- /dev/null +++ b/user/program.c @@ -0,0 +1,22 @@ +static long sys_write(const char* buffer, unsigned long buffer_size) +{ + long ret; + __asm__ volatile("int $0x80" : "=a"(ret) : "a"(1L), "D"(buffer), "S"(buffer_size) : "memory"); + return ret; +} +static void sys_exit(long code) +{ + __asm__ volatile("int $0x80" : : "a"(0L), "D"(code) : "memory"); + for (;;); +} + +void _start(void) +{ + const char* message = "wassup shawty\n"; + unsigned long message_length = 0; + while (message[message_length]) + message_length++; + + sys_write(message, message_length); + sys_exit(0); +} |
