Assembler Debuggers and Tool Arsenal
Last updated
Was this helpful?
Last updated
Was this helpful?
An assembler is a program that translates the Assembly language to the machine code. There are several different assemblers that depend on the target system's ISA:
Microsoft Macro Assembler (), x86 assembler that uses Intel syntax for MS-DOS and Microsoft Windows
GNU Assembler (), used by GNU Project, default back-end of GCC
Netwide Assembler (), x86 architecture used to write 16-bit, 32-bit(IA-32), and 64-bit(x86-64) programs, one of the most popular assemblers for Linux
Flat Assembler (), x86, supports Intel-style assembly language on the IA-32 and x86-64
We will use NASM in this note
When a source code file is assembled, the resulting file is called an object file. It is a binary representation of the program.
While the assembly instructions and the machine code have a one-to-one correspondence, and the translation process may be simple, the assembler does some further operations such as assigning memory location to variables and instructions and resolving symbolic names.
Once the assembler has created the object file, a linker is needed in order to create the actual executable file. What a linker does is take one or more object files and combine them to create the executable file.
An example of these object files are the kernel32.dll and user32.dll which are required to create a windows executables that accesses certain libraries.
The process from the assembly code to the executable file can be represented here: