linux平台学x86汇编(十五):使用命令行参数
# arg.s .section .text .globl _start _start: nop movl $1, %eax movl $0, %ebx int $0x80
(gdb) r 100 101 102 #运行时带入三个参数 Starting program: /home/allen/as/i_arg/arg 100 101 102 Breakpoint 1, _start () at arg.s:5 5 nop (gdb) s 6 movl $1, %eax (gdb) print $esp #打印堆栈栈顶地址 $1 = (void *) 0xbffff3d0 (gdb) x/20x 0xbffff3d0 #查看堆栈向上20个地址的数据,其中第一个数据为命令行参数的个数,后面紧接着 0xbffff566 0xbffff57f 0xbffff583 0xbffff587为命令行参数的参数的地址(gdb) r 100 101 102 0xbffff3d0: 0x00000004 0xbffff566 0xbffff57f 0xbffff583 0xbffff3e0: 0xbffff587 0x00000000 0xbffff58b 0xbffff5ac 0xbffff3f0: 0xbffff5cb 0xbffff5ec 0xbffff5fc 0xbffff607 0xbffff400: 0xbffff615 0xbffff666 0xbffff6a0 0xbffff6b2 0xbffff410: 0xbffff6c8 0xbffff6e6 0xbffff6fd 0xbffff708 (gdb) x/d ($esp) 0xbffff3d0: 4 (gdb) x/s 0xbffff566 # 参数为程序名称 0xbffff566: "/home/allen/as/i_arg/arg" (gdb) x/s 0xbffff57f #查看第一个参数内存地址内的内容 0xbffff57f: "100" (gdb) x/s 0xbffff583 #查看第二个参数内存地址内的内容 0xbffff583: "101" (gdb) x/s 0xbffff587 #查看第三个参数内存地址内的内容 0xbffff587: "102" (gdb)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。