gpt4 book ai didi

无法执行系统调用 "execve"

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:43 26 4
gpt4 key购买 nike

我是新手,所以我可能对表达不准确。我需要用汇编程序在 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

最佳答案

如果您查看生成的代码,您会发现编译器优化了 argvenvp 的初始化,前提是您的 asm block 不是访问它们(因为你只声明你需要指针本身)。

解决方案:添加一个"memory" clobber 告诉编译器您可以读取或写入任何内存。

关于无法执行系统调用 "execve",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23376678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com