X86 Disassembly

Preface
The act of program creation, using common compilers and assemblers, takes software from an information-rich source code format and transforms it into a difficult-to-read machine code format. The reverse process, trying to convert machine code into a human-readable format, is significantly more difficult and requires high-level intuition and pattern matching skills.

This book is going to discuss the disassembly and decompilation of x86 machine code and x86 assembly code.


 * This book is new and could use your help. We need help with proof-reading, content authoring, editing and more. This is a wiki, so feel free to join in.

Table of Contents

 * Cover
 * Introduction

Tools

 * Assemblers and Compilers
 * Disassemblers and Decompilers
 * Disassembly Examples
 * Analysis Tools

Platforms

 * Microsoft Windows
 * Windows Executable Files
 * GNU/Linux
 * Linux Executable Files
 * OS X
 * OS X Executable Files

Code Patterns

 * The Stack
 * Functions and Stack Frames
 * Functions and Stack Frame Examples
 * Calling Conventions
 * Calling Convention Examples
 * Branches
 * Branch Examples
 * Loops
 * Loop Examples

Data Patterns

 * Variables
 * Variable Examples
 * Data Structures
 * Objects and Classes
 * Floating Point Numbers
 * Floating Point Examples

Difficulties

 * Code Optimization
 * Optimization Examples
 * Code Obfuscation
 * Debugger Detectors

Resources and Licensing

 * Resources
 * Licensing
 * Manual of Style