envp[M] <------ (N+1)*4+(M+1)*4
.............
.............
envp[1] <------ (N+1)*4+8(%esp)
envp[0] <------ (N+1)*4+4(%esp)
argv[N] <------ (N+1)*4(%esp)
.............
.............
argv[1] <------ 8(%esp)
argv[0] <------ 4(%esp)
argc <------ (%esp)
下面的一个简单的例子,显示所有的命令行参数。
.text
.globl _start
_start:
popl %ecx
vnext:
popl %ecx
test %ecx, %ecx
jz exit
movl %ecx, %ebx
xorl %edx, %edx
strlen:
movb (%ebx), %al
inc %edx
inc %ebx
test %al, %al
jnz strlen
movb $10, -1(%ebx)
movl $4, %eax # 系统调用号(sys_write)
movl $1, %ebx # 文件描述符(stdout)
int $0x80
jmp vnext
exit:
movl $1,%eax # 系统调用号(sys_exit)
xorl %ebx, %ebx # 退出代码
int $0x80
ret用gas汇编代码:
as -o args.o args.s
ld -s -o args args.o
[smallcat@smallcat code]$ ./args Linux Windows
./args
Linux
Windows
559



被折叠的 条评论
为什么被折叠?



