Like in many other languages, importing or including libraries are also possible in ASM. We will include the
asm_io.inc as an example here. The required files can be found in the Resources section.
The following ASM code includes the
asm_io.inc library and uses the
dump_regs function defined in it.
%include "asm_io.inc" segment .text global asm_main asm_main: enter 0, 0 pusha ; push registers on stack dump_regs 0 ; print register contents (in hexadecimal) popa ; get the registers back from the stack mov eax, 0 ; return 0 to the C programm leave ret
We first need to compile
asm_io.asm and acquire
asm_io.o here. Note that the
-d ELF_TYPE tells the ASM code, that we are compiling for a Linux system. Read
asm_io.asm for how to compile for other systems.
$ nasm -f elf -d ELF_TYPE asm_io.asm
Thenafter we can compile the executable with the following command:
$ nasm -f elf dumpregs.asm $ gcc -m32 -o dumpregs driver.o dumpregs.o asm_io.o
This program will show the registry contents on the console. Here is a sample output:
$ ./dumpregs Register Dump # 0 EAX = 00000001 EBX = F7723000 ECX = FFD49F30 EDX = FFD49F54 ESI = 00000000 EDI = 00000000 EBP = FFD49EF8 ESP = FFD49ED8 EIP = 08048492 FLAGS = 0286 SF PF