Systems Programming
C, Rust, and Go at the level where memory layout and calling conventions are the design.
- •7 min read•elfreverse-engineering
Mini-Readelf: Gluing It All Together
The capstone. Four parts of pieces, headers, sections, symbols, relocations, joined into one tool that reads any ELF. The only new mechanic is the sh_link chain: offset into a table that holds offsets into a table that holds strings.
- •6 min read•elfreverse-engineering
Relocations: How PIE Binaries Fix Their Addresses
A PIE binary can't write final addresses because ASLR moves it. The linker leaves placeholders and the loader patches them after mapping. That's a relocation: R_X86_64_RELATIVE, GLOB_DAT and JUMP_SLOT.
- •7 min read•elfreverse-engineering
Symbol Tables: What Function Names Actually Are
Function names in a binary are just entries in a table. Two tables actually: .symtab and .dynsym. Here's what each is for, how the struct works, and how to resolve a name from an address.
- •12 min read•elfreverse-engineering
Building a Custom ELF Loader from Scratch, in C
You type ./program and the kernel loads it. Here's how that works: we build a userspace ELF loader in ~300 lines of C that maps PT_LOAD segments, builds a stack by hand, and jumps to the entry point.
- •8 min read•elfreverse-engineering
Parsing ELF Binaries in C
The first step to actually understanding what runs on your machine: read an ELF file yourself. No libelf, no readelf — just mmap and pointer casts. I walk the header and section table of a real binary, and diff my output against the tools that already exist.
- •8 min read•reverse-engineeringsystems-programming
Why C still matters for Reverse Engineering
C is still the GOAT of reverse engineering
- •2 min read•systems-programming
The Go Shebang: Scripting Without the Compile-Run Friction
In traditional Unix Scripting, the `#!` (shebang) tells the kernel which interpreter to use for the file. For Go, which is a compiled language, this is technically a lie. By using a wrapper, you can treat `.go` files as executable scripts that compile and run on the fly.
- •4 min read•binary-exploitationtooling
C from the trenches: breaking the stack
A deep dive into how C handles memory and how we can use buffer overflows to hijack program execution.
- •4 min read•systems-programmingassembly
Building My First Multiboot Toy Kernel (x86, C + Assembly)
How I built a 32-bit freestanding toy kernel that boots through GRUB, enters C cleanly, and now handles CPU exceptions through GDT+IDT setup.
