Я новичок, поэтому могу быть неаккуратным с выражениями. Мне нужно сделать системный вызов "execve" на C с ассемблером. Я не использую никакие библиотеки. Часть, которая не работает,
char *nul=(char *)0;
char *argv[] = { "/bin/date", nul };
char *envp[] = { nul };
long ret;
asm volatile ("int $0x80" : "=a" (ret) : "a" (11), "b" (argv[0]), "c" (argv), "d" (envp));
//"a" (11) ... 11 correspondes to execve
Я компилирую код (и не получаю ни ошибок, ни предупреждений) с
gcc -m32 -nostdlib -nostdinc -static -O2 sysc.c -o sysc
Когда я пытаюсь запустить программу, я вижу это сообщение:
A NULL argv[0] was passed through an exec system call.
Aborted
&argv
через ecx? - person ccKep   schedule 30.04.2014c
также должно бытьargv[0]
. Указатели на массивы невероятно редки и бесполезны в C; обычно вы всегда работаете с указателем на первый элемент. - person Kerrek SB   schedule 30.04.2014/bin/date
подпадает под действие coreutil и демонстрирует то же поведение, что и/bin/ls
. - person jww   schedule 20.02.2017