Linux 汇编语言(GNU GAS汇编)开发指南(6)

六、命令行参数

在 Linux 操作系统中,当一个可执行程序通过命令行启动时,其所需的参数将被保存到栈中:首先是 argc,然后是指向各个命令行参数的指针数组 argv,最后是指向环境变量的指针数据 envp。在编写汇编语言程序时,很多时候需要对这些参数进行处理,下面的代码示范了如何在汇编代码中进行命令行参数的处理:

例3. 处理命令行参数

# args.s
.text
.globl _start
       
_start:
        popl %ecx  # argc
vnext:
        popl %ecx  # argv
        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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpfwf.html