| ▲ | kees99 2 hours ago |
| Claude has surprisingly good knowledge of X11 protocol. The other day, colleague showed me a (pretty basic) terminal emulator written in one-shot by Opus. Kicker is - that was compiled to a 30 KB static binary. That's right. No libX11, no libXfont, not even libc. |
|
| ▲ | amszmidt an hour ago | parent | next [-] |
| Only because the X Window System is very heavily documented, e.g., in the excellent "The Definitive Guides to the X Window System Series". |
|
| ▲ | glitchc 2 hours ago | parent | prev [-] |
| No libc? It used inline assembly routines? |
| |
| ▲ | kees99 2 hours ago | parent | next [-] | | Yes, something like this: static inline long read(int fd, void *buf, long count) {
register long rax asm("rax") = __NR_read;
register long rdi asm("rdi") = (long)fd;
register long rsi asm("rsi") = (long)buf;
register long rdx asm("rdx") = count;
asm volatile(
"syscall"
: "+r"(rax)
: "r"(rdi), "r"(rsi), "r"(rdx)
: "rcx", "r11", "memory"
);
return rax;
}
| | |
| ▲ | asveikau 25 minutes ago | parent [-] | | The linux kernel also has its own headers (IIRC it was something like <asm/unistd.h> and/or <sys/syscall.h>, but might depend on architecture and version) where it will provide the stub asm statements. In my memory the syscall ABI has changed a few times (i386 had int $0x80, then sysenter, then abstracting it in the vdso, then amd64 has 'syscall'), so it may be easier to let the kernel header provide the mechanism. |
| |
| ▲ | Chu4eeno 2 hours ago | parent | prev [-] | | It's quite easy to get it to do syscalls directly, I even got Fable to do a simple standalone TLS implementation (in C). Not really useful since it hardcoded a set of supported algorithms etc., but it's fun to see how "simple" you can force it to go. |
|