赞
踩
(1)调用者将所有参数从右向左入栈。
(2)调用者清理参数所占的栈空间。
传入参数的顺序:
1.ebx存储第一个参数
2.ecx存储第二个参数
3.edx存储第三个参数
4.esi存储第四个参数
5.edi存储第五个参数
section .data str_c_lib: db "c library says : hello world!",0xa ;0xa为LF ascll码 str_c_lib_len equ $-str_c_lib str_syscall:db "syscall says :hello wrold",0xa str_syscall_len equ $-str_syscall section .text global _start _start: ;模拟c语言中系统调用库函数write ;方式1 push str_c_lib_len push str_c_lib push 1 call simu_write add esp,12 ;方式2 跨过库函数,直接进行系统调用 mov eax,4 mov ebx,1 mov ecx,str_syscall mov edx,str_syscall_len int 0x80 ;退出程序 mov eax,1 ; 第一号功能是exit int 0x80 ; simu_write: push ebp mov ebp,esp mov eax,4 mov ebx,[ebp+8] ; 第一个参数 mov ecx,[ebp+12] ; 第二个参数 mov edx,[ebp+16] ; 第三个参数 int 0x80 pop ebp ret
链接的时候可能出现的问题
ld: i386 architecture of input file `foo.o’ is incompatible with i386:x86-64 output
-m elf_i386
链接的时候加入-m elf_i386
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。