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!