答案here表示ESP + 4
指向argv[0]
。但是我无法使其工作:
.section .text
.globl _start
_start:
movl 8(%esp), %ebx
movl $1, %eax
int $0x80
现在,当我尝试执行此操作时:
$ as --32 argv.s -o argv.o
$ ld -m elf_i386 argv.o -o argv
$ ./argv 2
$ echo $?
16
它显示16
,尽管我希望这里是16。我在做什么错了?
答案 0 :(得分:2)
多亏了彼得的评论,我终于找到了答案。由于argv
是pointer to pointer to char
,因此在第一个取消引用中,您将获得一个地址,该地址是指向字符的指针。再次取消引用将给您所需的结果:
.section .text
.globl _start
_start:
movl 8(%esp), %ebx
movl (%ebx), %ebx
movl $1, %eax
int $0x80
执行时:
$ ./argv 1
49
49是预期结果,即1
的{{3}}。