Bluff Your Way in x64 Assembler

By Roger Orr

Modern development environments and debuggers enable us to spend much of our time writing and reading source code. This makes the life of a developer much easier and most of the time we can reason about our program solely based on the source code itself.

However, from time to time we need to understand the layers beneath our high level language; for example when debugging a program or a crash.

What sense can we make of a page of assembly language code - and how do we find the most important information easily?

I’ll look at some typical use cases, mainly focussing on 64-bit C++ programs as these are relatively "close to the metal".

  • What instructions are most common, and roughly what do they correspond to?

  • How do I walk the stack to find my caller(s)?

  • Where are my variables hiding?

The intent is to help you in relating the assembly language view of a program to the lines of source code.

(No prior knowledge of assembler is required.)