
512 bytes, no operating system, no standard library, no memory management — BIOS drops you at 0x7c00 in 16-bit real mode and everything after that is yours to build. A hand-written Stage-1 MBR, line by line, and why the exercise surfaces every abstraction you normally stand on.
Read More
Step through a hand-written x86 bootloader in GDB, hit a far jump, and watch your function names turn to garbage. Nothing crashed — CS changed, and in real mode that moves every address out from under GDB's symbol table. Why it happens and how to keep symbols following you.
Read More
Attach GDB to a stock Ubuntu 6.8 x86-64 kernel in QEMU, set a breakpoint, and watch nothing happen. The kernel is running fine. The bug isn't in the code — it's that KASLR moved the kernel and your symbols didn't. How to fix it without a rebuild.
Read More
Rebuild an ARM64 Linux kernel with Yocto, boot it in QEMU, and step through it in GDB — on a laptop, no hardware. The workflow is the easy part; the part nobody tells you is why GDB can't find your source and how to fix it.
Read More
top shows 100% CPU. perf shows the truth. Two threads doing identical work run in 841ms or 8118ms depending on one thing your profile never mentions: where their data sits in memory. Cache misses, TLB misses, and false sharing, with real code and real numbers.
Read More
kprobe and fentry both hook kernel functions from eBPF, but they install differently, cost differently, and hand you arguments differently. A source-level comparison, grounded in a real eBPF project, plus why the choice is a production cost — not trivia.
Read More
Every x86 machine boots in 16-bit real mode and switches to protected mode in its first moments of life. That switch is a GDT, an IDT, one bit in CR0, and a far jump — and those tables are where ring 0 vs ring 3 actually comes from. Walked through real bootloader assembly.
Read More
ja, jb, je, jl don't read your operands. They read bits in EFLAGS that some earlier instruction wrote — and it isn't always the cmp you think. Once you see that in GDB, reverse engineering and crash-dump triage stop being guesswork.
Read More
The same lock-free C program runs clean on Intel for hours and fails on ARM64 in a minute. The source is identical. This is store→load reordering — why x86's TSO hides it, why ARM64 exposes it, and what a fence actually does — with a real litmus test and its numbers.
Read More
Codex ships 43,591 lines of sandboxing across four platform backends, and treats enforcement and approval as two separate axes. Pi ships none and says so in its README. Both are defensible. What is not defensible is the assumption in between, where a dialog box gets mistaken for a boundary. A source-level look at what your coding agent can actually do to your machine.
Read More