Master the inner workings of your x64 Linux system and expand your OS expertise by writing your very own debugger using C++. If debuggers seem like magic to you, there is no better way to demystify them than to write your own. This book will show you exactly how to do it, walking you through the entire process of building a debugger for x64 Linux systems using C++. As you go from an empty filesystem folder to a fully fledged debugger capable of setting breakpoints, stepping through code, manipulating variables, and more, you’ll learn how to: Attach to a process Read and write to registers Set hardware and software breakpoints Output disassembly Support multithreading and other tasks As you add features to your debugger, you’ll also pick up a wealth of knowledge about operating systems, compilers, software testing, and low-level programming that you can use in your day-to-day development. Table of contentsChapter 1: Project SetupChapter 2: Compilation and Computer ArchitectureChapter 3: Attaching to a ProcessChapter 4: Pipes, procfs, and Automated TestingChapter 5: RegistersChapter 6: Testing Registers with x64 AssemblyChapter 7: Software BreakpointsChapter 8: Memory and DisassemblyChapter 9: Hardware Breakpoints and WatchpointsChapter 10: Signals and SyscallsChapter 11: Object FilesChapter 12: Debug InformationChapter 13: Line TablesChapter 14: Source-Level Breakpoints and SteppingChapter 15: Call Frame InformationChapter 16: Stack UnwindingChapter 17: Shared LibrariesChapter 18: MultithreadingChapter 19: DWARF ExpressionsChapter 20: Variables and TypesChapter 21: Expression EvaluationChapter 22: Advanced TopicsAppendix: Check Your Knowledge AnswersGlossary