The surprise new book by Jonathan Levin tackles systems-level programming, debugging and reverse engineering on not one but three platforms - Linux, Android and Darwin, on ARMv8 and ARMv9! Exploring the common denominators of POSIX APIs, but also diverging to each platform's idiosyncrasies, the author takes the reader on a spectactular journey of exploration - starting with the vital knowledge of Aarch64 assembly, through compilation and linking, the binary formats of ELF & Mach-O, Process Lifecycle, Memory - both system view and process view (including a detailed examination of GlibC's ptmalloc2 and Scudo!), through Multithreading, I/O & IPC, profiling, hooking and injection techniques, an exploration of runtimes (Objective-C, Swift and Android's ART), and finally - the post mortem of core dumps and crash reports. As a bonus, two chapters - "Beyond User Mode" - takes the battle to the kernel and beyond, and "Reverse Engineering" takes a case study approach to demonstrate reverse engineering techniques. Spectacular colorful illustrations lay out in full detail file formats, memory dumps, and object structures. No special tools are needed - beyond the ones the author provides on the companion website - newDebuggingBook.com. If you've read theoretical Operating Systems literature (e.g. Stallings, Tanenbaum, Silberschatz) - this is the practical view that will complement it perfectly. If you know Jonathan Levin's other works - the critically acclaimed *OS Internals trilogy, and the Android Internals books - you will find this a vital addition, drawing parallels between two seemingly different systems, and explaining not just the details - but the methodology behind finding them.