【发布时间】:2014-04-29 22:50:31
【问题描述】:
我是新手,所以我的表达方式可能不准确。我需要使用汇编程序在 C 中进行系统调用“execve”。我不使用任何库。不工作的部分是
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
【问题讨论】:
-
您是否尝试通过 ecx 传递
&argv? -
为什么需要使用汇编程序从 C 程序调用 C 函数? (我并不是说没有可能的原因,但知道你的目标可能有助于回答这个问题。)
-
c也应该是argv[0]。指向数组的指针在 C 中非常罕见且无用;通常你总是对指向第一个元素的指针进行操作。 -
@ccKep 我做了,没有帮助。
-
@KerrekSB 不,也不起作用