Не удалось получить argv [0] в сборке x86 - PullRequest
0 голосов
/ 09 сентября 2018

Ответ здесь указывает, что 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 голосов
/ 09 сентября 2018

Благодаря комментарию Питера я наконец смог найти ответ. Поскольку argv является указателем на указатель на char, при первом разыменовании вы получите адрес, который является указателем на символ. Повторная разыменование даст вам желаемый результат:

        .section .text

        .globl _start

_start:

        movl 8(%esp), %ebx
        movl (%ebx), %ebx
        movl $1, %eax
        int $0x80

При его выполнении:

$ ./argv 1
49

49 - ожидаемый результат, который является ASCII символом из 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...