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.
dumpregs.asm
%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