Execve () добавляет два дополнительных аргумента - PullRequest
0 голосов
/ 06 августа 2020

Когда я компилирую следующий код и запускаю на нем strace, я вижу, что он добавляет два дополнительных элемента в массив args[].

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *args[2];
    args[0] = "/bin/ls";
    args[1] = "-lh";
    execve(args[0], args, NULL);

    return 1;
}

strace говорит, что это то, что на самом деле вызывается:

execve("/bin/ls", ["/bin/ls", "-lh", "\340\301\361\267", "\1"], NULL)

1 Ответ

1 голос
/ 06 августа 2020

Вам нужно добавить нулевой ptr к последнему элементу массива аргументов. В противном случае execve не знает, где заканчивается ваш массив.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *args[3];
    args[0] = "/bin/ls";
    args[1] = "-lh";
    args[2] = NULL;
    execve(args[0], args, NULL);

    return 1;
}

Итак, в основном вы видите, что execv передает случайные аргументы, пока не найдет NULL в памяти, которую вы указываете с помощью массива. Конечно, он тоже может вылетать.

...