我是一个新手,所以我可能对表情不太适应我需要用汇编程序在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
最佳答案
如果您查看生成的代码,您将看到编译器优化了argv
和envp
的初始化,前提是您的asm块没有访问它们(因为您只声明需要指针本身)。
解决方案:添加一个blobber来告诉编译器您可以读取或写入任何内存。