In this tutorial, we are going to see how to create an executable from an assembly file.
The following example uses a 32-bit version of Ubuntu.
Notice that the version is important when you compiling your assembly file.
It is the same for the linkage operation.
Let's see it in detail.
This file is named hello.asm.
section .text global _start ;must be declared for linker (ld) _syscall: ;system call int 0x25 ret _start: ;tell linker entry point push dword len ;message length push dword msg ;message to write push dword 1 ;file descriptor (stdout) mov eax,0x3 ;system call number (sys_write) call _syscall ;call kernel add esp,12 ;clean stack (3 * 4) push dword 0 ;exit code mov eax,0x3f ;system call number (sys_exit) call _syscall ;call kernel ;no need to clean stack section .data msg db "Hello, world!",0xa ;our dear string len equ $ - msg ;length of our dear string
The following command will create a new file: hello.o.
We tell to the compiler that we want an elf file, standing for Executable and Linkage Format.
We use nasm tool to compile it.
$ nasm -f elf hello.asm
It will be necessary for the linkage.
$ ld -s hello.o -o hello
This time we use the ld tool to link our object (hello.o) into an executable.
A new file is then created, named hello.
Let's run it!
$ ./hello
Result:
$ Hello, world!
Add new comment