Chapter 5 Further Reading: Your Development Environment
Tool Documentation
1. NASM Manual H. Peter Anvin et al. Free online at nasm.us/doc, also as NASM.pdf
The definitive reference for NASM. Chapter 2 covers the basic syntax, sections, and data declarations. Chapter 3 covers the preprocessor (macros, conditionals, includes). Chapter 4 covers the label and expression system. Chapter 6 covers output formats (elf64, bin, macho64). The manual is comprehensive and well-indexed — use it as a reference when you're unsure about a specific NASM feature rather than reading cover to cover. The sections on macros (Chapter 3) and output formats (Chapter 6) are particularly important for practical work.
2. GNU Binutils Documentation Free Software Foundation. Free online at gnu.org/software/binutils
Documentation for ld, objdump, readelf, nm, strip, ar, and other GNU binary utilities. The ld documentation (the linker) is particularly important for understanding linker scripts, section merging, and symbol resolution. The objdump manual lists all available format codes for the -M and display flags. For the MinOS kernel project, the linker script documentation in the ld manual is required reading.
3. GDB Documentation: "Debugging with GDB" Richard Stallman et al. Free online at gnu.org/software/gdb/documentation
The complete GDB manual. For assembly-specific work: Chapter 9 (examining source files and disassembly), Chapter 10 (examining data), Chapter 17 (running processes). The section on TUI mode is in Chapter 25. The section on "set disassembly-flavor intel" (setting Intel syntax permanently) is in Chapter 9. The documentation for Python scripting of GDB (Chapter 23) is useful for automating repetitive debugging tasks like printing all callee-saved registers or tracing every instruction to a log file.
4. strace Manual Page
Dmitry Levin and others. man 1 strace on any Linux system
The strace manual is the complete reference for system call tracing. Key options for assembly work: -e trace=write,read (trace only specific calls), -c (count and summarize), -r (relative timestamps), -T (time in each call), -s N (show N bytes of string arguments), -p PID (attach to a running process). The strace output format is described in detail. Understanding strace output is a fundamental skill for OS and systems programming.
QEMU and Virtualization
5. QEMU Documentation QEMU Project. Free online at qemu-project.gitlab.io/qemu
The complete QEMU manual. For OS development: the system emulation section covers machine types, CPU emulation, device emulation, and disk images. The -s -S flags for GDB debugging are described in the debugging section. The GDB stub documentation explains the Remote Serial Protocol (RSP) that QEMU uses to communicate with GDB. For the MinOS project, the most relevant QEMU modes are -fda (boot from floppy image), -drive format=raw (boot from disk image), and -kernel (direct kernel boot for ELF kernels).
6. QEMU Internals: "QEMU, A Fast and Portable Dynamic Translator" Fabrice Bellard, 2005 USENIX Annual Technical Conference
The original QEMU paper explaining the design of QEMU's dynamic binary translation. Understanding how QEMU works (translating guest instructions to host instructions in blocks, using TLBs to cache translations) helps explain why QEMU is fast enough for interactive use and how it maintains accurate emulation semantics. Bellard also designed NASM and wrote the tcc compiler, so this paper comes from an exceptionally capable practitioner.
Make and Build Systems
7. "Managing Projects with GNU Make" Robert Mecklenburg, O'Reilly, 3rd Edition, 2004. Free online (older editions)
The comprehensive guide to GNU Make. Covers the dependency graph model, pattern rules, automatic variables ($<`, `$@, $*`, `$^), built-in functions (wildcard, patsubst, filter), recursive make, and performance. The Makefile template in this chapter uses pattern rules and automatic variables — the Mecklenburg book explains why they work and how to extend them. Chapter 6 on managing large projects is particularly relevant for the MinOS kernel project.
8. "The Art of UNIX Programming" Eric S. Raymond, Addison-Wesley, 2003. Free online at catb.org/esr/writings/taoup
Part of UNIX philosophy is tool composition: small tools that do one thing well, connected by pipes and scripts. This book explains why the Unix toolchain (make, ld, nm, objdump, strace, etc.) is designed the way it is, and how to use it effectively. Chapter 1's philosophy sections are relevant to understanding why assembly development on Linux has such a rich toolchain ecosystem. The discussion of transparency and observability is directly applicable to assembly debugging: the tools give you complete visibility into what the system is doing.
GDB Scripting and Extensions
9. GDB Python API Documentation GNU Project. Free at sourceware.org/gdb/current/onlinedocs/gdb.html/Python-API.html
GDB's Python scripting interface. You can write Python scripts that automate debugging tasks: print register states to a log file on every stepi, set conditional breakpoints based on complex conditions, write custom commands that summarize multiple register values at once. For assembly development, a Python script that automatically displays and annotates all changed registers after each step is a productivity multiplier. The API documentation covers breakpoints, frames, values, symbols, and command creation.
10. PEDA / pwndbg / GEF — GDB Enhanced for Exploitation Various. GitHub: longld/peda, pwndbg/pwndbg, hugsy/gef
Three popular GDB extensions for security research and exploitation. All three provide enhanced displays of registers, memory, and stack in a color-coded layout designed for analyzing programs during exploitation work. pwndbg is the most actively maintained (2024-2026) and provides features like: automatic display of nearby code, stack, and heap contents at each break; colored register display with change highlighting; commands for heap analysis; and GDB commands for common CTF tasks. For security-focused assembly work, installing one of these extensions makes GDB significantly more productive.