From Real Mode to Protected Mode: Building Custom GDT & IDT for x86 Security
The journey from 16-bit real mode into 32-bit protected mode. Hand-built Global Descriptor Table and Interrupt Descriptor Table — the foundation every modern OS rests on.
SecurityLab track — runtime and distributed systems, kernel debugging, eBPF, Go concurrency, memory models, bootloaders, and assembly walkthroughs. Code-first, source-cited, mechanism-deep.
Long-form writing and video on runtime, distributed systems, and kernel internals — the layers below the application where most production reliability is actually decided.
Topics: Go runtime and concurrency, distributed systems patterns (RPC, queues, idempotency), kernel debugging with GDB/QEMU, eBPF, memory models, bootloaders, and assembly walkthroughs.
Companion to the HarrisonSecurityLab YouTube channel. Blog and video are listed below — most recent first.
The journey from 16-bit real mode into 32-bit protected mode. Hand-built Global Descriptor Table and Interrupt Descriptor Table — the foundation every modern OS rests on.
End-to-end workflow for embedded Linux: customizing, building, and debugging an ARM64 Linux kernel with Yocto, then booting under QEMU and attaching GDB.
Project overview of SentinelEdge — a professional-grade eBPF kernel security framework showcasing modern Linux kernel programming, deep system tracing, and production-style observability.
Compares Rust and C at the assembly level, focusing on ownership/memory management, immutability, and bounds checks. Real-world debug and analysis on disassembled output.
Technical deep-dive comparing kprobe and fentry eBPF program attachment in the Linux kernel: how each probe loads, where the hook lands in machine code, and what overhead each carries.
What really happens when CPUs reorder your instructions. Side-by-side experiment putting store→load reordering to the test on x86-64 and ARM64.
Three invisible bottlenecks that silently destroy program performance — cache miss, TLB miss, false sharing — demonstrated with real C code and CPU counter data.
Build and debug the Ubuntu 6.8 x86_64 kernel from source with debug symbols, then attach GDB via QEMU. Includes the trick for disabling KASLR without rebuilding.
How to debug a hand-written x86 assembly bootloader with GDB symbols — even across far jumps and segment changes. The trick most tutorials skip.
All x86 conditional jumps (ja, jb, je, etc.) are triggered by EFLAGS — not by syntax or code order. Hands-on with GDB and pwndbg to see exactly which flag fires each branch.
© 2026 HarrisonSec. All rights reserved.