代码之家  ›  专栏  ›  技术社区  ›  Sibi

无法在x86程序集中获取argv[0]

  •  0
  • Sibi  · 技术社区  · 7 年前

    答案 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 回复  |  直到 7 年前
        1
  •  2
  •   Sibi    7 年前

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

    ASCII character 属于 1

    推荐文章