A series on x86 assembly programming

This is an announce that I am currently working on a series of posts about assembly programming. For this occasion, I created the series section in the blog πŸ“‘ : a place dedicated to articles that intend to deeply explore πŸ”Ž some specific topics with advanced explanations and hands-on examples.

In my first series, I will hence explore assembly programming : namely programming directly with the processors’ instruction sets πŸ§‘β€πŸ’». x86 being the most common processor architecture on desktop and laptop computers πŸ’», I will solely focus on this platform. The idea is to progress step by step toward the goal of being able to implement practical programs directly in assembly.

My interest in assembly programming and more generally in low level programming comes from the impression that modern softwares have a very intensive use of resources for many avoidable tasks ⚑ (as a rebound effect due to the increase of computing power). The idea is to understand more deeply how softwares work and apprehend their use of computing resources. I am also concerned by planned obsolescence that could come from softwares becoming unusable after system upgrade for instance. For this reason, I am also interested in the idea of retro-compatibility and the possibility to patch softwares without any source code by manipulating its assembly instructions πŸ’Ύ. For instance, see this example about patching an old game to make it work on modern operating systems. Slowly, theses different concerns got me into the topic of assembly and more generally low level programming.

This series will be written as I learn on the topic, with potential mistakes and imprecisions made along the way 🀐. I take some time to write about it as a ways to compile knowledge that can be sometimes difficult to find on the web, and also to rise the interest in this approach. The series would be more adapted to someone already familiar with programming, preferably with a low level language like C.

The first few posts of this series are available in this page. I will also update the links directly here :

This series introduces the basics of assembly programming in the x86-64 language.

πŸ”‘ Key points

  • Registers
  • System calls
  • Command line and gdb

πŸ”‘ Key points

  • Control flow
  • Branching
  • Conditional and loops

πŸ”‘ Key points

  • Control flow
  • Memory and stack

πŸ”‘ Key points

  • Functions
  • Stack frame
  • Recursion

πŸ”‘  Key points:

  • Function parameters
  • Calling conventions
  • Interoperability with C

πŸ”‘ Key points

  • Algorithmic
  • Memory usage
  • Code modularity

πŸ”‘ Key points

  • Flags register and branching
  • Floating points numbers
  • Floating points operations

πŸ”‘ Key points

  • Shared objects and PIE
  • Calling conventions
  • Data types

Enjoy!