Contents 5
Preface to the Second Edition 15
Preface to the First Edition 16
Combined Preface from Original Editions 17
About the Author 18
Chapter x86.1: Memory, Registers, and Simple Arithmetic 19
Chapter x86.2: Debug and Release Binaries 33
Chapter x86.3: Number Representations 46
Chapter x86.4: Pointers 53
Chapter x86.5: Bytes, Words, and Double Words 68
Chapter x86.6: Pointers to Memory 73
Chapter x86.7: Logical Instructions and EIP 95
Chapter x86.8: Reconstructing a Program with Pointers 102
Chapter x86.9: Memory and Stacks 109
Chapter x86.10: Frame Pointer and Local Variables 128
Chapter x86.11: Function Parameters 141
Chapter x86.12: More Instructions 153
Chapter x86.13: Function Pointer Parameters 164
Chapter x86.14: Summary of Code Disassembly Patterns 170
Appendix x86: Using Docker Environment 174
Chapter x64.1: Memory, Registers, and Simple Arithmetic 176
Chapter x64.2: Debug and Release Binaries 191
Chapter x64.3: Number Representations 204
Chapter x64.4: Pointers 211
Chapter x64.5: Bytes, Words, and Double Words 229
Chapter x64.6: Pointers to Memory 235
Chapter x64.7: Logical Instructions and EIP 258
Chapter x64.8: Reconstructing a Program with Pointers 266
Chapter x64.9: Memory and Stacks 275
Chapter x64.10: Local Variables 295
Chapter x64.11: Function Parameters 305
Chapter x64.12: More Instructions 314
Chapter x64.13: Function Pointer Parameters 325
Chapter x64.14: Summary of Code Disassembly Patterns 329
Appendix x64: Using Docker Environment 335
