gpt4 book ai didi

c - execve() 无法在 C 中启动程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:58 24 4
gpt4 key购买 nike

我正尝试在 Linux 上使用 unistd.h 中的 execve() 生成一个新进程。我尝试将以下参数传递给它 execve("/bin/ls", "/bin/ls", NULL); 但没有得到任何结果。我也没有收到错误,程序就退出了。发生这种情况有原因吗?我试过以 root 和普通用户身份启动它。我需要使用 execve() 的原因是因为我试图让它在像这样的程序集调用中工作

program: db "/bin/ls",0

mov eax, 0xb
mov ebx, program
mov ecx, program
mov edx, 0
int 0x80

谢谢!

最佳答案

您传递给 execve 的参数是错误的。第二个和第三个必须是一个带有 NULL 标记值的 char 指针数组,而不是单个指针。

换句话说,像这样:

#include <unistd.h>
int main (void) {
char * const argv[] = {"/bin/ls", NULL};
char * const envp[] = {NULL};
int rc = execve ("/bin/ls", argv, envp);
return rc;
}

当我运行它时,我确实得到了当前目录中的文件列表。

关于c - execve() 无法在 C 中启动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469818/

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