无法在x86汇编中获得argv [0]

时间:2018-09-09 03:56:17

标签: assembly x86

答案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。我在做什么错了?

1 个答案:

答案 0 :(得分:2)

多亏了彼得的评论,我终于找到了答案。由于argvpointer 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}}。