FAQ for Assembly course

A collection of the most diverse questions I have received via email that might be helpful before tackling the course.

What knowledge is required?

In order to face the course with serenity and not to go crazy at the first lines of code, it is necessary to have a basic knowledge of computer architecture (the basic components) and iterative programming. The notions will be covered as the reader gets deeper into the course; otherwise Google is your friend!

What do I need for the course?

For the course, in addition to a good deal of patience, you’ll need any machine that can support 32-bit (or emulation of 32-bit Intel-like environments). We will be using the built-in assembler by default in all Unix-like platforms, as and the ld linker. A good graphics IDE is also recommended (no, you don’t need Word!).

I am using MacOS Catalina or later versions.

Unfortunately, Apple has removed the ability to run 32-bit binaries from MacOS Catalina (for the moment we only deal with 32-bit low-level programming). Alternatively, any 32 bit virtual machine could be fine (I suggest: any Unix-based distro! It will make your work much easier).

For the more curious, assembling any program (even with the --static and --arch i386 flags), will produce the following error:

bad CPU type in executable

I am using an Apple Silicon device

You should create a new virtual machine where x86 emulation is supported. UTM is one of my favorite virtual machine manager, but you can use VMWare too. Currently, Rosetta can not execute any 32bit binary with Intel instructions due to absence of 32-bit supporting architecture.

What syntax will we use for the class?

For assembly, the two most commonly used syntaxes are GAS syntax and Intel syntax. In this course, we will be using more of the Intel syntax; we will introduce a section about the main differences between one syntax and the other in order to give the student a comprehensive knowledge.

Intel 8086? Is this the 90s?

No, absolutely not. The course is intended to be exclusively didactic: why introduce a modern architecture that could require more time and deeper knowledge? It is highly recommended for the more experienced reader to delve into the architectures (ARM, x86_64, AMD), using the user manuals on the Web.

Why another course on Assembly?

Other courses are often badly misunderstood (they often include C and Assembly together) and lack a modular approach. With a few exceptions, I’m generally not satisfied with what I’ve found on the Web, so I’m going to try to write some articles on Assembly, based on my experience as a student.

I don’t claim to be a voice of truth for anyone, though any comments about errors are well appreciated!

Do you have any other questions? Email me.

About SerHack

I am a security researcher, a writer, and a contributor to the Monero project, a cryptocurrency focused on preserving privacy for transactions data. My publication Mastering Monero has became one of the best rated resources to learn about Monero. More about me

Follow me on Twitter or send me an e-mail. I also appreciate donations, they allow me to continue doing my work and writing.

Mastering Monero Book