"Disarming Code" Errata & Typo Corrections for v1.0.0 (As of 2025/10/10)

Your humble Author would like to express his personal apologies for these minor typing and editing mistakes, which eluded my very capable (but not technical) editor. And myself for writing the most bit-intesive chapter in the wee hours... Errare est Humanum. Absolve me.

This list will be maintained at https://NewDebuggingBook.com/errata/. So far, only one miniscule (but nonetheless) technical error (FEAT_HBC), congratulations and many thanks to Solomon Tan for spotting it and double checking - and winning a well deserved 0.001BTC.

(These will all be pre-fixed in v1.0.1 of the book, which will be coming soon, once more people tackle all 520+ pages)


Chapter 1:

Technical error: BC.Cond - FEAT_HBC - "will behave very consistently and is very unlikely to change direction." (as per __unlikely). Note, however, that, 1/3.1.8.1 states that BC.cond "defaults to a traditional branch if the feature is not supported". Solomon correctly perused the ARM spec to see it actually defaults to an UNDEFINED instruction. This is peculiar to me, since the instruction does use an otherwise reserved bit in the B. variants, but - if the grand designers said so, they said so. I was wrong, Solomon, of course, was right. This is a minor but clear technical error, and therefore earns him 0.001BTC - $120. With his attentive reading and great reporting, this is well deserved - thank you!
  • ARM's Branch Target Indicators (BTI) feature is configured in kernel mode by bits BT0/Bt1 of SCTLR_EL1. Typo was SCTLR_EL[0/1], but there is obviously no SCTLR_EL0 (if there had been, kernel would be irrelevant).


  • Spotted by Giannis T. - Thank you:
  • Chapter 2

    Also spotted by Giannis T. - Much obliged:

    Chapter 3

  • Binary Formats, Listing 3.1-2: The ELF file layout, illustrated(page 85) The note in item (6) currently reads: "Each ELFnn_Phdr of type PT_LOAD ... , to load into e_memsz bytes at e_vpaddr, with p_flags r/w/x..." Here e_memsz should be p_memsz,and e_vpaddr should be p_vaddr. (Thanks to Ivan Shevtsov!)
  • Chapter 4:

  • Table 4/2-4: USE the nano allocator, Luke
  • In Chapter 4/3.1.3, there is an extra "the" in "breaking the API through the the proc_info(2!)".
  • In Chapter 4/4.3.2, "but only under tighly controlled" should be "tightly".
  • Chapter 9:

  • In Chapter 9/1.1.3, "allows any user mode process to simple open(2)..." should be "simply".
  • In Chapter 9/3.1, there are two minor typos:
  • In Table 9/4-6, the Purpose of DTRACE_PROBE[#] is wrongly listed as "Define a USDT probe, no arguments" due to cut/paste. It should be "Define a USDT probe, with arguments".
  • Chapter 10:

  • In Chapter 10/2.1.2.1, "root priveleges" should be "root privileges".
  • Chapter 13:

  • Figure 13/2-25: