section .data
msg db "Hello, World, via print by myself", 0xA
len equ $ - msg
section .text
global _start
_start:
; push two int into stack
push msg
push len
call print
add esp, 8 ; pop that two int
_exit:
mov ebx, 0
mov eax, 1
int 0x80
print:
push ebp ; save the value of ebp
mov ebp, esp ; ebp now points to the top of stack
mov edx, [ebp + 8]
mov ecx, [ebp + 12]
mov ebx, 1
mov eax, 4
int 0x80
mov esp, ebp
pop ebp ; restore ebp
ret
在linux中,可以使用如下命令编译这个文件,假设将文件名是 call.asm,首先我们先将这个文件编译成elf格式的文件
nasm -f elf call.asm -o call.o
第二步就是链接
ld -s call.o -o call
链接成功后,就可以测试运行了
./call