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 stringThe 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